Estou trabalhando em um webapp que utiliza React with Redux. Publiquei uma mensagem semelhante no redux-thunk Github, mas acho que este pode ser um problema mais geral com middleware Redux. Atualmente, estou usando Redux-Thunk de uma maneira muito semelhante ao exemplo encontrado aqui:
http://redux.js.org/docs/advanced/ExampleRedditAPI.html
Ao executar meu aplicativo, vejo o seguinte erro no 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
Aqui está um link para meu projeto:
https://github.com/jbri7357/redux-sample-app
Eu diria que, dado seu nível de uso, é muito improvável que seja um problema com Redux ou Redux Thunk, e muito mais provável que seja um erro sutil no código do aplicativo.
É difícil diagnosticar apenas pela fonte. Se você pudesse publicar um projeto reproduzindo o problema, isso seria útil.
O problema está aqui :
const mapDispatchToProps = (dispatch) => {
return dispatch;
}
Assim como mapStateToProps
, mapDispatchToProps
deve retornar um objeto com adereços .
Se você fornecer uma função, connect()
chamará essa função para obter um mapDispatchToProps()
específico da instância (isso é útil para memoização por instância). No entanto, isso não é relevante para o seu problema.
No seu caso, você pretendia retornar {dispatch}
(um objeto) em vez de dispatch
(uma função):
const mapDispatchToProps = (dispatch) => {
// return dispatch;
return {dispatch};
}
Isso vai resolver o problema. A propósito, este _é_ o comportamento padrão se você não especificar mapDispatchToProps
, então você também pode excluí-lo completamente e não passá-lo para connect()
alguma.
Eu espero que isso ajude!
Muito obrigado por sua ajuda com isso e a explicação completa que você forneceu!
Comentários muito úteis
O problema está aqui :
Assim como
mapStateToProps
,mapDispatchToProps
deve retornar um objeto com adereços .Se você fornecer uma função,
connect()
chamará essa função para obter ummapDispatchToProps()
específico da instância (isso é útil para memoização por instância). No entanto, isso não é relevante para o seu problema.No seu caso, você pretendia retornar
{dispatch}
(um objeto) em vez dedispatch
(uma função):Isso vai resolver o problema. A propósito, este _é_ o comportamento padrão se você não especificar
mapDispatchToProps
, então você também pode excluí-lo completamente e não passá-lo paraconnect()
alguma.Eu espero que isso ajude!