Je travaille sur une webapp qui utilise React avec Redux. J'ai publié un message similaire sur le redux-thunk Github, mais je pense que cela pourrait être un problème plus général avec le middleware Redux. J'utilise actuellement Redux-Thunk d'une manière très similaire à l'exemple trouvé ici:
http://redux.js.org/docs/advanced/ExampleRedditAPI.html
Lors de l'exécution de mon application, l'erreur suivante s'affiche dans Chrome:
Uncaught RangeError: Maximum call stack size exceeded
(anonymous function) @ index.js:10
dispatch @ applyMiddleware.js:44
(anonymous function) @ index.js:12
dispatch @ applyMiddleware.js:44
(anonymous function) @ index.js:12
dispatch @ applyMiddleware.js:44
(anonymous function) @ index.js:12
dispatch @ applyMiddleware.js:44
Voici un lien vers mon projet:
https://github.com/jbri7357/redux-sample-app
Je dirais que compte tenu de leur niveau d'utilisation, il est très peu probable que ce soit un problème avec Redux ou Redux Thunk, et beaucoup plus susceptible d'être une erreur subtile dans le code de l'application.
Il est difficile de diagnostiquer à partir de la seule source. Si vous pouviez publier un projet reproduisant le problème, ce serait utile.
Le problème est ici :
const mapDispatchToProps = (dispatch) => {
return dispatch;
}
Tout comme mapStateToProps
, mapDispatchToProps
est censé renvoyer un objet avec des accessoires .
Si vous fournissez une fonction, connect()
appellera cette fonction pour obtenir un mapDispatchToProps()
spécifique (ceci est utile pour la mémorisation par instance). Ceci n'est cependant pas pertinent pour votre problème.
Dans votre cas, vous vouliez retourner {dispatch}
(un objet) au lieu de dispatch
(une fonction):
const mapDispatchToProps = (dispatch) => {
// return dispatch;
return {dispatch};
}
Cela résoudra le problème. Au fait, c'est le comportement par défaut si vous ne spécifiez pas mapDispatchToProps
, vous pouvez donc aussi bien le supprimer complètement et ne pas le passer du tout à connect()
.
J'espère que ça aide!
Merci beaucoup pour votre aide et les explications détaillées que vous avez fournies!
Commentaire le plus utile
Le problème est ici :
Tout comme
mapStateToProps
,mapDispatchToProps
est censé renvoyer un objet avec des accessoires .Si vous fournissez une fonction,
connect()
appellera cette fonction pour obtenir unmapDispatchToProps()
spécifique (ceci est utile pour la mémorisation par instance). Ceci n'est cependant pas pertinent pour votre problème.Dans votre cas, vous vouliez retourner
{dispatch}
(un objet) au lieu dedispatch
(une fonction):Cela résoudra le problème. Au fait, c'est le comportement par défaut si vous ne spécifiez pas
mapDispatchToProps
, vous pouvez donc aussi bien le supprimer complètement et ne pas le passer du tout àconnect()
.J'espère que ça aide!