Redux: Recursión infinita que ocurre con middleware

Creado en 1 abr. 2016  ·  3Comentarios  ·  Fuente: reduxjs/redux

Estoy trabajando en una aplicación web que utiliza React with Redux. He publicado un mensaje similar en el redux-thunk Github, pero creo que esto podría ser un problema más general con el middleware Redux. Actualmente estoy usando Redux-Thunk de una manera muy similar al ejemplo que se encuentra aquí:
http://redux.js.org/docs/advanced/ExampleRedditAPI.html

Al ejecutar mi aplicación, veo el siguiente error en 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

Aquí hay un enlace a mi proyecto:
https://github.com/jbri7357/redux-sample-app

question

Comentario más útil

El problema está aquí :

const mapDispatchToProps = (dispatch) => {
  return dispatch;
}

Al igual que mapStateToProps , se supone que mapDispatchToProps devuelve un objeto con accesorios .

Si proporciona una función, connect() llamará a esa función para obtener un mapDispatchToProps() específico de la instancia (esto es útil para la memorización por instancia). Sin embargo, esto no es relevante para su problema.

En su caso, quería devolver {dispatch} (un objeto) en lugar de dispatch (una función):

const mapDispatchToProps = (dispatch) => {
  // return dispatch;
  return {dispatch};
}

Eso solucionará el problema. Por cierto, este _es_ el comportamiento predeterminado si no especifica mapDispatchToProps , por lo que también podría eliminarlo por completo y no pasarlo a connect() en absoluto.

¡Espero que esto ayude!

Todos 3 comentarios

Yo diría que, dado su nivel de uso, es muy poco probable que sea un problema con Redux o Redux Thunk, y es mucho más probable que sea un error sutil en el código de la aplicación.

Es difícil de diagnosticar solo a partir de la fuente. Si pudiera publicar un proyecto que reproduzca el problema, sería útil.

El problema está aquí :

const mapDispatchToProps = (dispatch) => {
  return dispatch;
}

Al igual que mapStateToProps , se supone que mapDispatchToProps devuelve un objeto con accesorios .

Si proporciona una función, connect() llamará a esa función para obtener un mapDispatchToProps() específico de la instancia (esto es útil para la memorización por instancia). Sin embargo, esto no es relevante para su problema.

En su caso, quería devolver {dispatch} (un objeto) en lugar de dispatch (una función):

const mapDispatchToProps = (dispatch) => {
  // return dispatch;
  return {dispatch};
}

Eso solucionará el problema. Por cierto, este _es_ el comportamiento predeterminado si no especifica mapDispatchToProps , por lo que también podría eliminarlo por completo y no pasarlo a connect() en absoluto.

¡Espero que esto ayude!

¡Muchas gracias por su ayuda con esto y la explicación detallada que proporcionó!

¿Fue útil esta página
0 / 5 - 0 calificaciones