Meine Antwort ist etwas außerhalb des linken Feldes. Es beleuchtet ein Problem, das mich zu diesem Beitrag geführt hat. In meinem Fall schien die App nicht neu gerendert zu werden, obwohl sie neue Requisiten erhielt.
React-Entwickler hatten eine Antwort auf diese häufig gestellte Frage, die besagt, dass 99% der Zeit, in der React nicht erneut gerendert wird, wenn der (Store) mutiert ist. Noch nichts über die anderen 1%. Mutation war hier nicht der Fall.
TLDR;
componentWillReceivePropsSo statekann das mit dem Neuen synchronisiert werden props.
Edge - Fall: Sobald stateUpdates, dann die App nicht wieder machen!
Es stellt sich heraus, dass Ihre App, wenn sie nur statezum Anzeigen ihrer Elemente verwendet wird, propsaktualisiert werden kann, aber statenicht, sodass kein erneutes Rendern erforderlich ist.
Ich hatte statedas abhängig propsvon Redux erhalten store. Die Daten, die ich brauchte, waren noch nicht im Laden, also habe ich sie componentDidMountwie üblich abgerufen . Ich habe die Requisiten zurückbekommen, als mein Reduzierer den Speicher aktualisiert hat, da meine Komponente über mapStateToProps verbunden ist. Die Seite wurde jedoch nicht gerendert, und der Status war immer noch voller leerer Zeichenfolgen.
Ein Beispiel hierfür ist, dass ein Benutzer eine Seite "Beitrag bearbeiten" aus einer gespeicherten URL geladen hat. Sie haben über die postIdURL Zugriff auf die , aber die Informationen sind noch storenicht vorhanden, sodass Sie sie abrufen. Die Elemente auf Ihrer Seite sind gesteuerte Komponenten. Alle angezeigten Daten befinden sich also in state.
Mit Redux wurden die Daten abgerufen, der Speicher wurde aktualisiert und die Komponente wurde connectbearbeitet, aber die App spiegelte die Änderungen nicht wider. Bei näherer Betrachtung propswurden empfangen, aber App nicht aktualisiert. statenicht aktualisiert.
Nun, propswird aktualisiert und verbreitet, aber statenicht. Sie müssen speziell angeben state, um zu aktualisieren.
Sie können dies nicht tun render()und componentDidMounthaben die Zyklen bereits beendet.
componentWillReceivePropsHier aktualisieren Sie stateEigenschaften, die von einem geänderten propWert abhängen .
Anwendungsbeispiel:
componentWillReceiveProps(nextProps){
if (this.props.post.category !== nextProps.post.category){
this.setState({
title: nextProps.post.title,
body: nextProps.post.body,
category: nextProps.post.category,
})
}
}
Ich muss diesem Artikel einen Gruß aussprechen, der mich über die Lösung aufgeklärt hat, die Dutzende anderer Posts, Blogs und Repos nicht erwähnt haben. Alle anderen, die Schwierigkeiten hatten, eine Antwort auf dieses offensichtlich dunkle Problem zu finden, hier ist es:
ReactJs Komponentenlebenszyklusmethoden - Ein tiefer Tauchgang
componentWillReceivePropsHier werden Sie aktualisieren state, um mit den propsUpdates synchron zu bleiben .
Sobald stateUpdates, dann Felder je nach state Aufgaben wieder machen!