<Provider store={this.props.store}>
<ConnectedRouter history={this.props.history}>
<AppWrap>
<Header />
<Main>
<Switch>
<Route exact path="/" component={Component1}/>
<Route path="/component2" component={Component2}/>
</Switch>
</Main>
</AppWrap>
</ConnectedRouter>
</Provider>
In App.ComponentWillMount wird die Redux-Aktion this.props.requestApplesApiData
ausgelöst. Es wird von einer Saga behandelt, die einige Daten von einer API holt und mit einer anderen Aktion receiveApplesApiData
mit einer Nutzlast zurückgibt, die durch den Reduzierer zu dem Reduktionszustand hinzugefügt wird.Rendering von untergeordneten Komponenten verzögern, bis Saga in übergeordnetem Element ausgeführt wird. React-Komponente
componentWillMount(){
// triggers an action
// which is picked up by a saga,
// which is handled by the reducer
// which updates the redux state
this.props.requestApplesApiData();
}
Redux Zustand ist in Ordnung aktualisiert, wenn ich es in den Chrom Entwickler-Tools (w. Redux Erweiterung) untersuchen, aber ich bemerkte, dass der Redux-Zustand (mit den vor kurzem geholt „Äpfel“) nicht rechtzeitig aktualisiert wird in Component2, während die Wettlaufbedingung in Component 1 gewonnen wurde. Dies bedeutet, dass Component2 die "Äpfel" nicht anzeigen kann, weil sie zum Zeitpunkt der Renderfunktion nicht vorhanden waren.
Ein Re-Render würde normalerweise automatisch passieren, wenn es in einer verschachtelten baumartigen Struktur wäre, jedoch befinden sich "Äpfel" in ihrem eigenen Wurzelobjekt im Redux-Speicher.
Wie kann ich haben Component1 und Component2 warten auf App, um die notwendigen Daten zu holen. Oder anders ausgedrückt, wie kann ich die Renderfunktion in App verzögern/verzögern, bis die Daten reduktiv sind?