Redux: Unendliche Rekursion bei Middleware

Erstellt am 1. Apr. 2016  ·  3Kommentare  ·  Quelle: reduxjs/redux

Ich arbeite an einer Webanwendung, die React with Redux verwendet. Ich habe eine ähnliche Nachricht auf dem Redux-Thunk-Github gepostet, aber ich denke, dass dies möglicherweise ein allgemeineres Problem mit der Redux-Middleware ist. Ich verwende derzeit Redux-Thunk auf eine Weise, die dem hier gefundenen Beispiel sehr ähnlich ist:
http://redux.js.org/docs/advanced/ExampleRedditAPI.html

Beim Ausführen meiner App wird in Chrome der folgende Fehler angezeigt:

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

Hier ist ein Link zu meinem Projekt:
https://github.com/jbri7357/redux-sample-app

question

Hilfreichster Kommentar

Das Problem ist hier :

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

Genau wie mapStateToProps soll mapDispatchToProps ein Objekt mit Requisiten zurückgeben .

Wenn Sie eine Funktion connect() , ruft mapDispatchToProps() (dies ist nützlich für das Auswendiglernen pro Instanz). Dies ist jedoch für Ihr Problem nicht relevant.

In Ihrem Fall wollten Sie {dispatch} (ein Objekt) anstelle von dispatch (eine Funktion) zurückgeben:

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

Das wird das Problem beheben. Übrigens ist dies das Standardverhalten, wenn Sie mapDispatchToProps nicht angeben. Sie können es also genauso gut vollständig löschen und überhaupt nicht an connect() .

Ich hoffe das hilft!

Alle 3 Kommentare

Ich würde sagen, dass es aufgrund ihres Nutzungsgrades sehr unwahrscheinlich ist, dass es sich um ein Problem mit Redux oder Redux Thunk handelt, und viel wahrscheinlicher, dass es sich um einen subtilen Fehler im Code der App handelt.

Es ist schwer, allein von der Quelle aus zu diagnostizieren. Wenn Sie ein Projekt veröffentlichen könnten, das das Problem reproduziert, wäre dies hilfreich.

Das Problem ist hier :

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

Genau wie mapStateToProps soll mapDispatchToProps ein Objekt mit Requisiten zurückgeben .

Wenn Sie eine Funktion connect() , ruft mapDispatchToProps() (dies ist nützlich für das Auswendiglernen pro Instanz). Dies ist jedoch für Ihr Problem nicht relevant.

In Ihrem Fall wollten Sie {dispatch} (ein Objekt) anstelle von dispatch (eine Funktion) zurückgeben:

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

Das wird das Problem beheben. Übrigens ist dies das Standardverhalten, wenn Sie mapDispatchToProps nicht angeben. Sie können es also genauso gut vollständig löschen und überhaupt nicht an connect() .

Ich hoffe das hilft!

Vielen Dank für Ihre Hilfe und die gründliche Erklärung, die Sie gegeben haben!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

benoneal picture benoneal  ·  3Kommentare

CellOcean picture CellOcean  ·  3Kommentare

ramakay picture ramakay  ·  3Kommentare

vslinko picture vslinko  ·  3Kommentare

elado picture elado  ·  3Kommentare