Soy nuevo en la biblioteca React.js y estaba repasando algunos de los tutoriales y me encontré con:
this.setState
this.replaceState
La descripción dada no es muy clara (IMO).
setState is done to 'set' the state of a value, even if its already set
in the 'getInitialState' function.
Similar,
The replaceState() method is for when you want to clear out the values
already in state, and add new ones.
Intenté this.setState({data: someArray});
seguido de this.replaceState({test: someArray});
y luego console.logé y descubrí que state
ahora tenía ambos data
y test
.
Luego, lo intenté this.setState({data: someArray});
seguido de this.setState({test: someArray});
y luego console.logé y encontré que state
nuevamente tenía ambos data
y test
.
Entonces, ¿cuál es exactamente la diferencia entre los dos?
javascript
frontend
reactjs
myusuf
fuente
fuente
Respuestas:
Con
setState
los estados actual y anterior se fusionan. ConreplaceState
, descarta el estado actual y lo reemplaza solo con lo que usted proporciona. PorsetState
lo general, se usa a menos que realmente necesite eliminar claves por alguna razón; pero establecerlos en falso / nulo suele ser una táctica más explícita.Si bien es posible, podría cambiar; replaceState actualmente usa el objeto pasado como estado, es decir
replaceState(x)
, y una vez que se establecethis.state === x
. Esto es un poco más ligero quesetState
, por lo que podría usarse como optimización si miles de componentes establecen sus estados con frecuencia.Afirmé esto con este caso de prueba .
Si su estado actual es
{a: 1}
, y llamathis.setState({b: 2})
; cuando se aplique el estado, lo será{a: 1, b: 2}
. Si llama athis.replaceState({b: 2})
su estado sería{b: 2}
.Nota al margen: el estado no se establece instantáneamente, así que no lo haga
this.setState({b: 1}); console.log(this.state)
al realizar la prueba.fuente
.setState({...}, callback)
Definición por ejemplo:
Sin embargo, tome nota de esto de los documentos :
Lo mismo vale para
replaceState()
fuente
Según los documentos ,
replaceState
podría quedar obsoleto:fuente
Dado
replaceState
que ahora está en desuso, aquí hay una solución muy simple. Aunque probablemente es muy raro que recurra a necesitar esto.Para eliminar el estado:
O, alternativamente, si no desea tener varias llamadas a
setState
Esencialmente, todas las claves anteriores en el estado ahora regresan
undefined
, que se pueden filtrar muy fácilmente con unaif
declaración:En JSX:
Finalmente, para "reemplazar" el estado, simplemente combine el nuevo objeto de estado con una copia del estado anterior
undefined
y configúrelo como estado:fuente