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;
componentWillReceiveProps
So state
kann das mit dem Neuen synchronisiert werden props
.
Edge - Fall: Sobald state
Updates, dann die App nicht wieder machen!
Es stellt sich heraus, dass Ihre App, wenn sie nur state
zum Anzeigen ihrer Elemente verwendet wird, props
aktualisiert werden kann, aber state
nicht, sodass kein erneutes Rendern erforderlich ist.
Ich hatte state
das abhängig props
von Redux erhalten store
. Die Daten, die ich brauchte, waren noch nicht im Laden, also habe ich sie componentDidMount
wie ü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 postId
URL Zugriff auf die , aber die Informationen sind noch store
nicht 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 connect
bearbeitet, aber die App spiegelte die Änderungen nicht wider. Bei näherer Betrachtung props
wurden empfangen, aber App nicht aktualisiert. state
nicht aktualisiert.
Nun, props
wird aktualisiert und verbreitet, aber state
nicht. Sie müssen speziell angeben state
, um zu aktualisieren.
Sie können dies nicht tun render()
und componentDidMount
haben die Zyklen bereits beendet.
componentWillReceiveProps
Hier aktualisieren Sie state
Eigenschaften, die von einem geänderten prop
Wert 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
componentWillReceiveProps
Hier werden Sie aktualisieren state
, um mit den props
Updates synchron zu bleiben .
Sobald state
Updates, dann Felder je nach state
Aufgaben wieder machen!