Salut,
J'utilise redux avec react-native et jusqu'à présent, c'est génial!
Dans mon application, j'ai des profils d'utilisateurs et mon état ressemble à:
{
users: {
"1": {id: "1", name: "Ran"},
"2": {id: "2", name: "Dan"}
}
}
Maintenant, j'ai un composant <Profile>
qui rend un seul utilisateur
class Profile extends React.Component {
componentDidMount() {
const { dispatch, userId } = this.props;
dispatch(loadUser(userId));
}
render() {
console.log(this.props.user.name);
}
}
Quand le composant monte, j'expédie l'action loadUser
avec le userId
passé comme accessoire.
Cela envoie une requête à l'API et ajoute la réponse de l'utilisateur à mon état users
.
Maintenant, je veux que mon composant de profil reçoive l'utilisateur pour le rendre comme accessoire.
Donc, fondamentalement, je veux faire quelque chose comme:
function mapStateToProps(state) {
return {
user: state.users[props.userId]
};
}
module.exports = connect(mapStateToProps)(Profile);
Évidemment, cela ne peut pas fonctionner car je n'ai pas accès aux accessoires.
Je ne peux pas utiliser un état comme selectedProfile
pour filtrer car je rend plusieurs profils dans ma pile de navigation, chacun a un userId différent, si j'utilise l'état global selectedProfile, cela casse le bouton de retour.
La seule solution de contournement que j'ai trouvée est de créer un composant ProfileContainer
, qui filtrera l'état par son accessoire et passera l'utilisateur unique au composant Profile
.
class ProfileContainer extends React.Component {
render() {
let user = this.props.users[this.prop.userId];
return <Profile user={user} />
}
}
Est-ce que ça fait du sens? Quelqu'un d'autre rencontre ce problème?
Merci,
Ran.
Hey,
C'est plus un problème de react-redux ... Il me manque peut-être quelque chose, mais cela me semble très simple, utilisez l'argument "ownProps" qui est passé à mapStateToProps, donc votre code ci-dessus ressemblera:
function mapStateToProps(state, ownProps) {
return {
user: state.users[ownProps.userId]
};
}
module.exports = connect(mapStateToProps)(Profile);
Vous avez certainement accès aux accessoires du composant. À quoi ça ressemble? Voir https://github.com/rackt/react-redux#connectmapstatetoprops -mapdispatchtoprops-mergeprops-options pour plus de détails ou https://github.com/rackt/redux/blob/master/examples/real-world/containers/ UserPage.js pour l'exemple du monde réel ...
Je ne peux pas croire que j'ai raté ça! Merci @alanrubin
:pouces vers le haut:
Veuillez signaler ces problèmes dans react-redux à l'avenir.
Ce n'est pas lié à ce référentiel.
Commentaire le plus utile
Hey,
C'est plus un problème de react-redux ... Il me manque peut-être quelque chose, mais cela me semble très simple, utilisez l'argument "ownProps" qui est passé à mapStateToProps, donc votre code ci-dessus ressemblera:
Vous avez certainement accès aux accessoires du composant. À quoi ça ressemble? Voir https://github.com/rackt/react-redux#connectmapstatetoprops -mapdispatchtoprops-mergeprops-options pour plus de détails ou https://github.com/rackt/redux/blob/master/examples/real-world/containers/ UserPage.js pour l'exemple du monde réel ...