2016-10-17 2 views
0

Ich mache eine Kalender-App.Redux, Speichern von Daten außerhalb von Redux speichern

Wenn ein Benutzer zum nächsten Monat navigiert, Ich möchte Aktionen zum Abrufen von Daten initiieren.

Die Liste der auszuführenden Aktionen ist dynamisch und hängt von den derzeit installierten Komponenten ab.

Ich bin derzeit die Liste der Aktionen Speicherung in einer Liste zu schießen (in einem Modul)

Ich glaube, ich mache etwas nicht konventionell von Daten außerhalb von redux Speichern zu speichern.
Aber ich habe irgendwo gelesen, dass Redux-Speicher Zeug halten soll, das serialisierbar ist. Und meine Aktionen (die eigentlich Aktions-Ersteller sind, die von Redux-Thunk verwendet werden) sind nicht serialisierbar.

So Frage,

  1. ist es eine schlechte Idee, um Daten zu speichern außerhalb von redux speichern, wenn ja, warum?
  2. Warum ist es eine schlechte Idee, nicht serialisierbare Daten im redux-Speicher zu speichern?

Die Aktion Schöpfer (die ich in der Liste speichern) sieht wie folgt aus

function foo(params) { 
    var url = "some-url" 
    return (dispatch, getState) => { 
    fetch(url, params).then(..).then(dispatch(someAction)) 
    } 
} 

Antwort

0

Ihre Liste ist nicht Daten, es Code. Es ist eine Liste von Befehlen, die wirklich alles Code ist. Sie können dies außerhalb des Staates speichern.

Aber Ihre Liste sollte JavaScript sein. Sie können mit if verzweigen und switch für komplexe Turing-komplette Dynamik verwenden. Es sollte wahrscheinlich nur Thunked Action Creator sein.

Warum sollte Ihr Zustand serialisierbar sein: es ist so, dass Sie es serialisieren können. Es gibt Tools und Module, die den Status serialisieren müssen, aber es ist optional. Es zwingt Ihren Staat jedoch, Daten zu sein.

Das heißt, bei der Verwendung von Immutable.js ist State jetzt ein komplexes Objekt. Sie können es immer noch serialisieren, aber nicht mit JSON.stringify. Wenn Sie also eine Funktion schreiben können, jede Funktion, die den Status serialisieren kann, können Sie sie als Status serialisieren.

0

Während es technisch gesehen nichts "falsches" mit dem Ansatz ist, den Sie gerade machen, ist es ein bisschen ein Anti-Pattern. Wenn Sie eine Logik basierend auf bestimmten Bedingungen ausführen möchten, würden Sie dies normalerweise nicht tun, indem Sie die Funktionen speichern, die in einem Array aufgerufen werden sollen. Sie würden natürlich if und switch verwenden, wie die obige Antwort darauf hinweist, also sollten Sie es hier nicht tun.

Warum fügen Sie keine Middleware für asynchrone Aktionen hinzu und lassen Sie diese Aktion abbrechen, wenn ein Benutzer zum nächsten Monat navigiert. Diese Middleware würde einen Handler für diese Aktion aufrufen, in dem Sie die anderen Aktionen ausführen können, die Sie ausführen möchten. Das scheint mir sowieso viel sauberer zu sein.

Verwandte Themen