D'attente pour l'action à effectuer dans Réagissent Redux
Je suis nouveau sur react
et redux
et examiner comment elle est différente de angular
.
Je suis en train de faire une simple page de connexion et je ne suis pas en mesure de réaliser ce que je veux. Une fois que je reçois le nom d'utilisateur et le mot de passe à partir d'un formulaire de connexion, j'ai le présenter comme ci-dessous :
submitHandler(e){
e.preventDefault();
var user = {
name : this.state.username,
password: this.state.password
}
this.props.authenticateUser(user);
browserHistory.push('/home');
this.setState({
username:'',
password:''
})
}
Ici, authenticateUser
est une fonction à l'intérieur de mon réducteur (voir ci-dessous) qui permet de vérifier à partir d'un déjà existant de l'utilisateur de la liste, puis de l'état, de la propriété isAuthenticated
:
case 'AUTHENTICATE_USER':
var users = state.userslist;
var payloadUser = action.payload;
for (let i = 0; i < users.length; i++) {
let user = users[i]
if (user.name === payloadUser.name) {
return {...state, isAuthenticated: true };
}
};
return {...state, isAuthenticated: false };
Maintenant Angulaire, je voudrais juste attendre cet appel à la finition et de vérifier si cette valeur est true
ou false
, et accédez à la page d'accueil à l'aide de angular-router
.
Mais comment pourrais-je obtenir le même dans react
. Je suis à l'aide de react-router
dans mon exemple d'application.
J'ai essayé de vérifier isAuthenticated
dans mon submitHandler
fonction juste en dessous de là où j'appelle this.props.authenticateUser(user)
, mais le problème est , this.props.isAuthenticateUser
n'est pas mis à jour et renvoie false
, que j'ai défini comme initialState
dans mon réducteur.
S'il vous plaît dites-moi comment je peux vérifier isAuthenticated
après la authenticateUser
fonction a appelé pour que je puisse poursuivre ma page d'accueil de routage. Dois-je utiliser un promise
et d'attendre que l'etat mis à jour par redux
puis vérifier de nouveau ?? (Je sais de réagir est une façon de le chemin et il ne fonctionne pas de cette façon.)
Aussi si mon authentification échoue, comment puis-je afficher une erreur du panneau en dessous de mon formulaire de connexion. Je pense que l'utilisation d'une composante de l'erreur du panneau qui prend en isAuthenticated
en entrée et en vérifiant si la valeur est false, afin de montrer (ie. ngShow comme dans Angulaire.) Mais j'ai peur que ça ne marchera pas, car mon état ne sera pas mis à jour juste à temps.
Je sais que la fonction rendu sera appelé à un changement d'état. Mais j'ai juste ne peut pas envelopper la tête autour de Réagir clairement.
Modifier: Pour des raisons de concision, je n'ai pas fourni l'action des créateurs et de la pleine réducteur au-dessus plutôt montré seulement l'interrupteur en cas de fonctionnement pour authentifier l'utilisateur. Mon application suit l'original redux de l'architecture avec des actions, des réducteurs, des conteneurs, des composants et des.
EDIT: Github lien ici
OriginalL'auteur v1shnu | 2017-02-05
Vous devez vous connecter pour publier un commentaire.
Je vais essayer d'expliquer brièvement la façon dont les données de flux de travaux dans un Redux de l'application:
Le réducteur ne doit pas être appelée directement à partir de la composante. Votre appel à authentifier l'utilisateur doit être à l'intérieur d'une action et c'est ce qui devrait être expédiés à partir du composant.
Lorsque vous définissez l'action, vous pouvez donner à une propriété pour définir le type d'action qu'il est. Par exemple, dans ce cas, il pourrait être
type: AUTHENTICATE_USER
Après l'achèvement de l'action, le redux magasin appelle le réducteur où avec l'état actuel et de l'action. Ici, le redux de l'état peuvent être mis à jour en fonction
action.type
(le deuxième extrait de code ci-dessus)C'est la partie la plus importante: votre composant doit avoir un
mapStateToProps
méthode qui transmet les valeurs de votre Redux état comme accessoires dans votre composant. De sorte que les modifications de l'état, les accessoires mis à jour et le composant re-rend. Pour utilisermapStateToProps
, vous avez besoin pour mettre en œuvre connecter à partir de la réaction-redux de la bibliothèque. (https://github.com/reactjs/react-redux/blob/master/docs/api.md#connectmapstatetoprops-mapdispatchtoprops-mergeprops-options)À réaliser ce que vous voulez, c'est ce que je suggère:
Dans votre composant
componentWillReceiveProps
méthode, la vérification de laprops.isAuthenticated
et à l'aide decontext.router.push()
pour naviguer si l'utilisateur est authentifié.Également avoir un test basé sur
props.isAuthenticated
dans le composant derender
méthode pour afficher le message d'erreur.Quelques liens qui pourraient vous être utiles:
http://redux.js.org/docs/basics/DataFlow.html
http://redux.js.org/docs/basics/UsageWithReact.html
Dans un correctement configuré Redux application, l'état est mis à jour dès que vous recevez la réponse et le réducteur est appelé. Je pourrais être en mesure de vous aider plus en regardant votre code. Avez-vous peut-être avoir sur Gihub?
Je suis au travail dès maintenant. Va pousser le code de github et vais partager avec vous le lien une fois que j'atteins à la maison.
J'ai édité la question avec le lien vers le code. S'il vous plaît aider.
Bien Expliqué! Merci 🙂
OriginalL'auteur Nupur