Redux: Recursão infinita ocorrendo com middleware

Criado em 1 abr. 2016  ·  3Comentários  ·  Fonte: reduxjs/redux

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

question

Comentários muito úteis

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!

Todos 3 comentários

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!

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

mickeyreiss-visor picture mickeyreiss-visor  ·  3Comentários

caojinli picture caojinli  ·  3Comentários

ilearnio picture ilearnio  ·  3Comentários

CellOcean picture CellOcean  ·  3Comentários

vraa picture vraa  ·  3Comentários