Je suis à l'aide de Redux. Dois-je gérer entrée contrôlée par l'état dans le Redux stocker ou utiliser setState au niveau du composant?
J'ai été à essayer de comprendre la meilleure façon de gérer mon réagir formes. J'ai essayé d'utiliser le onChange de feu de l'action et de la mise à jour de mon redux magasin avec mon formulaire de données. J'ai également essayé de créer locales de l'état et, lorsque mon formulaire est soumis I la gâchette et de l'action et de la mise à jour de la redux magasin.
Comment dois-je gérer mon entrée contrôlée par l'état?
- Malheureusement, l'URL maintenant renvoie une 404.
- github.com/reactjs/redux/issues/159
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le composant de l'etat. Et puis prendre de l'etat et de lui donner comme argument à l'action. C'est à peu près le "Réagir de façon" comme décrit dans la Réagir Docs.
Vous pouvez aussi consulter les Redux Forme. Il n'est, fondamentalement, ce que vous avez décrite, et relie les entrées d'un formulaire avec Redux État.
La première méthode implique essentiellement que vous êtes en train de faire tout manuellement - un maximum de contrôle et maximum standard. La deuxième façon qui signifie que vous êtes en laissant le plus élevé composante de l'ordre de faire tout le travail pour vous. Et puis il y a tout entre les deux. Il existe plusieurs packages que j'ai vu que simplifier un aspect spécifique de la gestion de formulaire:
Réagir Formes -
Il fournit un tas de helper composants, afin de rendre l'affichage du formulaire et de la validation des plus simples.
Réagir JSON schema -
Vous permet de construire un formulaire HTML à partir d'un schéma JSON.
Formsy Réagir -
La description dit: "Cette extension de Réagir JS vise à être le "sweet spot" entre la flexibilité et la possibilité de réutilisation."
Mise à jour: semble que ces jours Redux Formulaire est remplacé par:
Et un de plus important concurrent dans l'espace qui vaut le détour est:
shouldComponentUpdate
, bien sûr, mais quelque chose que vous devez être conscients de. En fin de compte, il n'existe pas de réponse absolue - trouver quelque chose qui fonctionne pour votre application, et aller avec elle. Pour ce que ça vaut, j'ai récemment fait un prototype d'un composant wrapper qui gère les mises à jour actuelles, dans son état, et déclenche sans rebond des actions de mise à jour de la boutique (visible dans ce gist)redux-form
.redux-form
il y a une semaine et jusqu'à présent, il a été formidable. Puis-je demander ce genre d'expériences que vous avez eu avec elle qui vous a fait regarder ailleurs?J'aime cette réponse de l'un des Redux co-auteurs:
https://github.com/reactjs/redux/issues/1287
Qui est, si vous êtes sûr que votre formulaire ne sera pas affecter l'état global ou besoin d'être gardé après votre composant est démonté, puis garder au réagir état.
TL;DR
C'est bien d'utiliser tout ce qu'il semble adapté à votre application (Source: Redux docs)
Ces questions peuvent facilement vous aider à identifier l'approche qui serait le mieux approprié à votre application. Voici mes points de vue et des approches que j'utilise dans mes applications (pour les formulaires):
Locales de l'état
input
(s) et la soumet. J'utilise ce la plupart du temps pour des formes simples.Redux état
input
(s) provoque quelques autres composants derender
selon ce qui est entrée par l'utilisateur.Personnellement, je vous recommande fortement de tout garder dans le Redux de l'état et s'en va de la locale de l'état des composants. C'est essentiellement parce que si vous commencez à regarder de l'interface utilisateur en fonction de l'état que vous pouvez faire remplir browserless test et que vous pouvez prendre avantage de garder une référence de l'état complet de l'histoire (comme dans ce qui était dans leurs intrants, ce que les dialogues ont été ouverts, etc, quand un bug hit - pas quel était leur état depuis le début des temps) de l'utilisateur à des fins de débogage. Liées tweet du domaine de clojure
édité à ajouter: c'est là que nous et notre société sœur se déplacent en termes de nos applications de production et de la façon dont nous traitons redux/état/ui
À l'aide de l'assistant des bibliothèques est juste plus rapide et d'éviter de nous tous le passe-partout. Ils peuvent être optimisées, riche en fonctionnalités, etc ... Comme ils font tous les différents aspects de plus d'une brise. De les tester et de faire de votre arsenal que de savoir ce qui est utile et de mieux les différents besoins, c'est juste la chose à faire.
Mais si vous avez déjà mis en œuvre tout ce qui vous. Va le manière contrôlée. Et pour une raison vous avez besoin redux. Dans un de mes projets. J'avais besoin de maintenir la forme des états. Donc, si je vais sur une autre page et de revenir il va rester dans le même état. Vous avez seulement besoin de redux, si c'est un moyen de communiquer le changement de multiples composants. Ou si c'est un moyen pour stocker l'état, que vous avez besoin de restaurer.
Vous avez besoin redux, si l'état doit être mondial. Sinon, vous n'en avez pas besoin. Pour cette question, vous pouvez consulter cet excellent article ici pour une plongée profonde.
L'un des problèmes que vous pouvez rencontrer! Lors de l'utilisation de la contrôlée entrées. Est que vous pouvez juste envoi les changements à chaque frappe de touche. Et votre formulaire vais commencer gel. Il est devenu un escargot.
Vous ne devriez jamais directement d'expédition et d'utiliser le redux flux, à chaque changement.
Ce que vous pouvez faire, c'est d'avoir l'état des entrées stockées sur la composante locale de l'état. Et mise à jour à l'aide de
setState()
. Une fois le changement d'état, vous réglez une minuterie avec un retard. Il se annulé à chaque frappe de touche. la dernière frappe sera suivie par l'envoi d'action après le délai spécifié. (un bon délai peut être 500ms).(Savoir que
setState
, par défaut, gérer les multiples successifs de frappe efficace. Sinon, nous avons utilisé la même technique que mentionné ci-dessus (comme nous le faisons dans vanilla js) [mais ici, nous nous appuierons sursetState
])Voici un exemple ci-dessous:
Vous pouvez utiliser l'anti-modèle pour l'initialisation de la composante en utilisant les accessoires comme suit:
Dans le constructeur ou dans la
componentDidMount
crochet comme ci-dessous:Le plus tard nous permettre de restaurer l'état de la boutique, à chaque composant de montage.
Aussi, si vous avez besoin de changer la forme d'un composant parent, vous pouvez exposer une fonction pour le parent. En définissant pour
setInputs()
méthode qui est lié. Et dans la construction, vous exécutez les accessoires (qui est une méthode de lecture)getSetInputs()
. (Utile lorsque vous souhaitez réinitialiser les formes à certaines conditions ou des états).À mieux comprendre ce que j'ai fait ci-dessus, voici comment je suis à jour les entrées:
et voici mon formulaire: