2016-05-02 9 views
0

Bis jetzt, was auch immer, react + flux apps, die ich gebaut habe, war der Aufbau des ursprünglichen Zustandes des Ladens einfach, je nach den Anforderungen der App. Ich könnte einfach einfache JS-Objekte verwenden, oder falls der Status beibehalten werden muss, habe ich localStorage verwendet, das eine synchrone API hat, was dazu führt, dass der Zustand verfügbar ist, wenn getInitialState aufgerufen wurde.Wie kann der Anfangszustand in einem Flussspeicher asynchron geladen werden?

getInitialState() { 
    return State.getInitialState();//synchronous method which returns state 
} 

jedoch gemäß den aktuellen Anforderungen, muss ich den Zustand von IndexedDB speichern und abrufen, deren api ist asynchron. Daher ist der initialState, den ich momentan erhalte, nicht definiert, was zu einem invarianten Verletzungsfehler führt.

Ist es überhaupt möglich, den initialState im Speicher asynchron zu laden?

+1

Zwei Optionen: Geben Sie der App einen lokalen Anfangszustand, der verwendet werden soll, bis der asynchrone Aufruf abgeschlossen ist, oder geben Sie den Komponenten genügend Logik, um einen unvollständigen Status zu verarbeiten. In einer App, die ich kürzlich erstellt habe, lade ich beispielsweise Diagrammdaten asynchron. Jede Graph-Komponente zeigt eine Lade-Nachricht an, bis ihr Requisiten-Daten-Array Daten aufweist, da jede Komponente weiß, dass ihr Requisiten-Daten-Array niemals leer sein wird. –

+0

Sehen Sie sich die Beispiele für serverseitiges Rendering mit [mer] (http://mern.io/) an. Es gibt keinen richtigen Weg, aber ich fand diese Beispiele besonders sinnvoll. –

Antwort

0

Nehmen wir an, Ihr Geschäft hat eine Methode getInitialState(). und das gibt ein Objekt mit allen Daten im Speicher zurück. Sie sollten Standardwerte innerhalb des Speichers angeben, den Ihre Komponente haben sollte.

class ExampleStore { 
    constructor(){ 
     this.something = false 
     this.somethingElse = false 
     this.someData = {} 
    } 
    getInitialState(){ 
     return { 
      something: this.something, 
      somethingElse: this.somethingElse, 
      someData: this.someData, 
     }; 
    } 
} 

der Grund, warum Sie mit dieser Methode gehen wollen, weil Sie duplizieren nicht nur zu warten, bis die Asynchron-Aufruf in jedem Komponentencode möchten. Lassen Sie den Speicher einige Standardwerte zurückgeben, und wenn neue Daten dann dem Speicher zugewiesen werden, aktualisieren Sie die Komponente mit einer Speicheränderungsfunktion.

Verwandte Themen