Ich bin neu in der React.js-Bibliothek und habe einige der Tutorials durchgesehen und bin auf Folgendes gestoßen:
this.setState
this.replaceState
Die Beschreibung ist nicht sehr klar (IMO).
setState is done to 'set' the state of a value, even if its already set
in the 'getInitialState' function.
Ähnlich,
The replaceState() method is for when you want to clear out the values
already in state, and add new ones.
Ich habe versucht, this.setState({data: someArray});
gefolgt von this.replaceState({test: someArray});
und dann console.logged sie und ich fand, dass state
jetzt beide data
und hatte test
.
Dann habe ich versucht, this.setState({data: someArray});
gefolgt von this.setState({test: someArray});
und dann console.logged sie und ich fand, dass state
wieder beide data
und hatte test
.
Was genau ist der Unterschied zwischen den beiden?
javascript
frontend
reactjs
myusuf
quelle
quelle
Antworten:
Mit
setState
dem aktuellen und dem vorherigen Status werden zusammengeführt. MitreplaceState
wird der aktuelle Status gelöscht und nur durch das ersetzt, was Sie bereitstellen. Wird normalerweisesetState
verwendet, es sei denn, Sie müssen aus irgendeinem Grund wirklich Schlüssel entfernen. Das Setzen auf false / null ist jedoch normalerweise eine explizitere Taktik.Während es möglich ist, könnte es sich ändern; replaceState verwendet derzeit das übergebene Objekt als Status, dh
replaceState(x)
und sobald es festgelegt istthis.state === x
. Dies ist etwas leichter alssetState
, daher kann es als Optimierung verwendet werden, wenn Tausende von Komponenten häufig ihren Status festlegen.Ich habe dies mit diesem Testfall behauptet .
Wenn Ihr aktueller Status ist
{a: 1}
und Sie anrufenthis.setState({b: 2})
; Wenn der Zustand angewendet wird, wird es sein{a: 1, b: 2}
. Wenn Siethis.replaceState({b: 2})
Ihren Staat anrufen würden, wäre{b: 2}
.Randnotiz: Der Status wird nicht sofort festgelegt, also nicht
this.setState({b: 1}); console.log(this.state)
beim Testen.quelle
.setState({...}, callback)
Definition am Beispiel:
Beachten Sie dies jedoch in den Dokumenten :
Gleiches gilt für
replaceState()
quelle
Nach Ansicht der docs ,
replaceState
könnte veraltet erhalten:quelle
Da dies
replaceState
jetzt veraltet ist, finden Sie hier eine sehr einfache Problemumgehung. Obwohl es wahrscheinlich ziemlich selten ist, dass Sie darauf zurückgreifen würden / sollten.So entfernen Sie den Status:
Oder alternativ, wenn Sie nicht mehrere Anrufe tätigen möchten
setState
Im Wesentlichen kehren jetzt alle vorherigen Schlüssel im Status zurück
undefined
, was sehr einfach mit einerif
Anweisung gefiltert werden kann :In JSX:
Um den Status zu "ersetzen", kombinieren Sie einfach das neue Statusobjekt mit einer Kopie des alten Status
undefined
und legen Sie ihn als Status fest:quelle