Warum getDerivedStateFromProps statt componentDidUpdate?
Als gelesen in diese Reagieren Github issue ich sehe mehr und mehr, dass
die Kosten der
render()
ist relativ klein
In Reagieren 16.3, ich Frage mich, warum würde man mit dem neuen getDerivedStateFromProps statt componentDidUpdate?
Vorstellen, in diesem Beispiel:
getDerivedStateFromProps(nextProps, prevState) {
if (!prevState.isModalOpen && nextProps.isReady) {
return { isModalOpen: true };
}
}
versus
componentDidUpdate(prevProps, prevState) {
if (!prevState.isModalOpen && this.props.isReady) {
this.setState({ isModalOpen: true });
}
}
Später scheint einfacher, nur weil es mit nur bestehende API und sieht genauso aus wie das, was wir tun, in componentWillReceiveProps, so sehe ich nicht, warum die Nutzer gehen würde, für getDerivedStateFromProps? Was ist der nutzen?
Dank!
- Hat mich gefragt, diese als gut. Es scheint wie eine einzige bequeme Methode, tun die gleiche Logik wie bei der Initialisierung der Komponente und der update-Komponente. In Reagieren 15 ich habe geschrieben, eine Reihe von Komponenten, die Aufrufe der gleichen Funktion im Konstruktor & CWP. Wo, wie dies wirkt, daß einzelne Funktion für Sie. twitter.com/dan_abramov/status/960305777968930816
- Ok, ich denke, du hast Recht, dies ist aufgerufen, die init -, während die cDU ist aufgerufen, nur nach dem Rendern. Aber ich glaube, der einzige Unterschied zwischen den beiden Funktionen ist, dass es 1 mehr wiedergeben, wenn Sie Dinge tun, in der cDU.
Du musst angemeldet sein, um einen Kommentar abzugeben.
So Dan Abramov antwortete auf Twitter und es scheint, wie es gibt 2 Gründe, warum Sie verwenden sollten
getDerivedStateFromProps
stattcomponentDidUpdate
+setState
:getDerivedStateFromProps
wird aufgerufen, bevor das rendering auf init, können Sie initialisieren Sie Ihren Staat in dieser Funktion, anstatt einen Konstruktor zu tun.Aktuell, Sie hatten einen Konstruktor oder
componentWillMount
init Ihrem Zustand vor der ersten Wiedergabe.getDerivedStateFromProps
ist eigentlich Ersatz fürcomponentWillReceiveProps
undcomponentDidMount
ist nicht veraltet.Ich bin mir ziemlich sicher, es war die Gemeinschaft, die beschlossen, eine statische Methode mit diesem Namen.
Den Grund für diese änderung ist, dass
componentWillReceiveProps
war eine der Methoden, die zu Verwirrung geführt und weiter, bis einige Speicherlecks in Anwendungen des Benutzers:Hier ist die Dan Abramov tweet auch das macht das deutlicher:
componentDidMount
und vergessen, dass die neue Funktion?getDerivedStateFromProps
stattcomponentDidUpdate
? Weil das sind zwei verschiedene hook-Methoden.componentDidMount
? Das ist, was ich verlange.componentDidUpdate
beide werden als bei anderen Schritt des Komponenten-Lebenszyklus und verschiedene use-cases. Sie stelltengetDerivedStateFromProps
um Verwirrung zu vermeiden und verlassen, nur eine Methode, statt drei.getDerivedStateFromProps
ist statisch ein problem verursacht. Wenn Sie die Requisiten zu Holen, Informationen zum festlegen des Zustands, wie kann ich für eine bestimmte Komponenteninstanz ohne Globale Variablen (das wären dann die, die nicht Instanz-spezifisch)?getDerivedStateFromProps
. Das ist es, wascomponentDidUpdate
odercomponentDidMount
sind für.getDerivedStateFromProps
- Methode anstelle dercomponentDidMount/Update
Methoden. (Also kein abholen ingetDerivedStateFromProps
) reactjs.org/docs/...