Je suis peu confus quant à la manière efficace d'utiliser connect ()
de la bibliothèque react-redux . J'ai le composant de coup
class SignUp extends React.Component { //some functions render(){ return ( //other components <SignUpPageRight> <SignUpForm signupFunc={this.props.signupFunc} /> </SignUpPageRight> </SignUpPage> <SignUpFooter /> //component </SignUpPageWrapper> ); } } export default connect( mapStateToProps, mapDispatchToProps )(SignUp);
Dans le code ci-dessus, peu sont réactifs Component
(// commentés) et les autres sont const
de bibliothèque styled-component .
Pour le moment, j'ai créé SignUpForm
en tant que conteneur, c'est-à-dire enveloppé dans connect ()
class SignUpForm extends React.Component { //lots of code here using this.props from connect() } export default connect( mapStateToProps, mapDispatchToProps )(SignUpForm);
Mais j'estime que ce n'est pas la manière efficace d'utiliser Quelle serait la manière propre, efficace et efficace d'écrire ce code? connect
, le mieux serait d'envelopper le composant parent SignUp code> dans
connect
comme ci-dessous, puis en passant les méthodes
et états
comme accessoires
aux composants enfants. class SignUp extends React.Component {
//some functions
render(){
return (
<SignUpPageWrapper>
<SignUpPage>
<SignUpPageLeft>
<SignUpLeftText /> //component
</SignUpPageLeft>
<SignUpPageRight>
<SignUpForm /> //component <=
</SignUpPageRight>
</SignUpPage>
<SignUpFooter /> //component
</SignUpPageWrapper>
);
}
}
3 Réponses :
Selon le modèle de conception du conteneur / composants de présentation, le composant conteneur doit être informé de l'état et des actions Redux. Ceci est signalé dans les documents Redux
La raison en est que vous auriez plus de contrôle sur les composants qui ont accès à votre état et vos données ne seraient pas dispersées. Donc, dans votre cas, j'obtiendrais des actions d'état et de répartition dans le composant
et je les transmettrais comme accessoires à
.
Réflexions personnelles: je ne pense pas que cela ait quoi que ce soit à voir avec l'efficacité du code, c'est juste beaucoup plus facile à maintenir lorsque votre code évolue
Je ressens la même chose. Merci.
Il n'y a pas de bonne ou de mauvaise réponse ici, il s'agit de interpréter le contexte .
Ici, je pense que cela n'a pas de sens de connecter le composant SignUp
à Redux, si la seule chose que cela va faire est de passer les accessoires au code SignUpForm >.
Et aussi, permettez-moi de vous demander, que se passe-t-il si vous devez rendre le composant SignUpForm
dans un composant différent? Eh bien, ce composant doit également être connecté à Redux et doit également transmettre les accessoires.
J'essaie généralement de garder les données du magasin aussi près que là où je vais les utiliser, tant que cela a encore du sens.
J'espère que cela aide!
MODIFIER
D'un autre côté, si vous êtes sûr de ne pas utiliser SignUpForm
ailleurs dans votre application, et que vous avez également besoin de données du magasin en dehors de celles liées au SignUpForm
, je m'en tiendrai à connecter simplement le composant SignUp
.
Merci de donner des explications pour les deux scénarios. J'ai voté pour cela.
Si nous regardons la documentation, il y a en fait une bonne ou une mauvaise réponse à cela. La documentation Redux suggère de séparer les composants en composants de présentation et de conteneur.
Les liaisons React pour Redux séparent les composants de présentation des composants de conteneur. Cette approche peut faciliter la compréhension de votre application et vous permettre de réutiliser plus facilement des composants. Documentation Redux
Votre composant SignUpForm
est un exemple parfait d'un composant conteneur qui a pour tâche de communiquer avec le magasin redux. Les valeurs et les gestionnaires de répartition doivent être transmis via des accessoires à vos composants de présentation. Cela rend la manipulation de votre magasin très facile à comprendre car tout est contenu dans un seul composant.
Maintenant pour la réutilisabilité. Votre composant conteneur doit être suffisamment ordonné pour pouvoir contenir tous les composants de présentation qui manipuleront une tranche logique de votre magasin redux, mais suffisamment bas pour que vous puissiez le réutiliser autant que possible. Donc, pour un formulaire, le conteneur doit contenir toutes les entrées, et vous pouvez séparer les entrées elles-mêmes en autant de composants de présentation que vous le souhaitez. Cela vous permet également de réutiliser vos composants de présentation avec un composant de continainer différent tant que vous les structurez avec la modularité à l'esprit.
Personnellement, je voudrais
connect ()
composant parent, transmettre les accessoires et rendre les enfants des composants fonctionnels sans état.