2016-12-07 2 views
0

Ich rufe einen Thunk von einer Komponente Render-Funktion. Es funktioniert gut, wenn beim ersten App-Laden die Komponente, die den Thunk aufruft, geladen wird. Wenn ich jedoch die Anwendung auf einem anderen Weg laden und dann auf den Weg des Übergangs, der die Komponente macht, die die Thunk aufruft, habe ich den folgenden Fehler:Redux-Speicher-Versand führt zu setState error() in React

Warning: setState(...): Cannot update during an existing state transition (such as within render or another component's constructor). Render methods should be a pure function of props and state; constructor side-effects are an anti-pattern, but can be moved to componentWillMount .

Thunk Änderungen redux store Zustand, der nicht verwendet wird, durch jede Komponente in der App und wird nur innerhalb der Thunk über getState() verwendet, um einige bedingte Logik zu tun. Wenn ich den Versandaktions-Code vom Thunk entferne, verschwindet der Fehler.

Was fehlt mir?

+0

Fügen Sie die 'Komponente' hinzu, in der Sie diese' Warnung' erhalten. –

Antwort

1

Sie müssen nur die Grundregel beachten, sollten Sie nie ändern Ihren Zustand in der Render-Funktion Ihrer Komponente. Die gleiche Regel gilt für Ihren Komponentenstatus sowie für den Redux-Speicherstatus. Die Warnung, die Sie auf Ihrer Konsole sehen, ist auf die Aktion zurückzuführen, die Sie in Ihrem Rendering ausführen. Refactorieren Sie Ihren Code so, dass alle Versendungen und Statusänderungen in anderen Lebenszyklusmethoden stattfinden.

+0

Ich sende einige Analyseereignisdaten basierend auf dem bedingten Div in der Komponente rendert, also habe ich den Thunk innerhalb dieses bedingten div aufgerufen. Wie kann ich das umgestalten? Erstellen Sie eine klassenbasierte Komponente, die jedes Conditional Div enthält. – jasan

+1

Ich kann Ihnen das nicht ohne weiteres sagen, ohne in Ihren Code zu schauen, aber wenn die Bedingung, von der Ihr div abhängt, sich auf die an die Komponente gelieferten Props stützt, könnten Sie sie in componentDidRecieveProps einfügen. –

+0

@AmoolyaSKumar, * componentWillReceiveProps :) –