Voici mon code d'action de connexion. Qu'est-ce que je fais mal ? Comme vous pouvez le voir, la mise à jour de l'état du réducteur n'est pas appelée.
S'il vous plaît, aidez-moi les gars!
Réagissez - 16.8 Client Axios Http Node & Mongo Db Backend
export const loginUser = (userData) => {
axios.post(URL + '/api/admin/login', userData)
.then(res => {
return {
type: SIGNIN_USER,
payload: storeData
}
})
.catch(err => {
return {
type: SHOW_MESSAGE,
payload: err.response.data
}
});
};
4 Réponses :
.then(res => {
this.state.someResult = res;
})
non, je veux appeler la fonction de réduction à partir de l'action de répartition
Vous devez distribuer l'action, pas simplement renvoyer l'objet:
const dispatch = useDispatch(); // Assuming you're inside functional component
export const loginUser = (userData) => {
axios.post(URL + '/api/admin/login', userData)
.then(res => {
return dispatch({
type: SIGNIN_USER,
payload: storeData
})
})
.catch(err => {
return dispatch({
type: SHOW_MESSAGE,
payload: err.response.data
})
});
};
Quel est l'intérêt de renvoyer les résultats de l'envoi? Ce n'est que rarement utile.
./src/appRedux/actions/Auth.js Ligne 31: 'useDispatch' n'est pas défini no-undef
Vous devez d'abord effectuer importer {useDispatch} depuis 'react-redux' . Plus d'informations: react-redux.js.org/next/api/hooks#usedispatch
Essayez avec cet exemple de code:
export const loginUser = userData => dispatch => (
axios.post(URL + '/api/admin/login', userData)
.then(res => dispatch({ type: SIGNIN_USER, payload: res }))
.catch(err => dispatch({ type: SHOW_MESSAGE, payload: err.response.data }))
)
J'ai essayé cela, mais j'ai échoué. L'erreur comme l'action doit être un objet
cela signifie que vous ne distribuez pas correctement la fonction du composant.
consultez ce lien et suivez la bonne façon d'appeler l'action dans le composant. medium.com/backticks- tildes /…
Utilisez les fonctions Arrow pour améliorer la lisibilité du code. Pas besoin de renvoyer quoi que ce soit dans API.fetchComments, l'appel Api est asynchrone lorsque la requête est terminée, puis obtiendra la réponse, il vous suffit de distribuer le type et les données.
Le code ci-dessous fait le même travail en utilisant les fonctions Arrow .
export const bindComments = postId => {
return dispatch => {
API.fetchComments(postId).then(comments => {
dispatch({
type: BIND_COMMENTS,
comments,
postId
});
});
};
};
lien de référence: React-Redux: les actions doivent être des objets simples. Utilisez un middleware personnalisé pour les actions asynchrones