We want to hear from you!Take our 2021 Community Survey!
Este sitio ya no se actualiza.Vaya a react.dev

Estado del componente

¿Qué hace setState?

setState() programa una actualización al objeto estado de un componente. Cuando el estado cambia, el componente responde volviendo a renderizar.

¿Cuál es la diferencia entre state y props?

props (abreviatura de ”properties”) y state son objetos planos de JavaScript. Mientras ambos contienen información que influye en el resultado del render, son diferentes debido a una importante razón: props se pasa al componente (similar a los parámetros de una función) mientras que state se administra dentro del componente (similar a las variables declaradas dentro de una función).

Aquí hay algunos buenos recursos para leer más sobre cuándo usar props vs. estado:

¿Por qué setState me está dando el valor incorrecto?

En React, tanto this.props como this.state representan los valores renderizados, es decir, lo que hay actualmente en la pantalla.

Las llamadas a setState son asíncronas; no te fíes de que this.state refleje el nuevo valor inmediatamente después de llamar a setState. Pasa una función de actualización en lugar de un objeto si necesitas calcular valores en función del estado actual (revisa a continuación para más detalles).

Ejemplo de código que no se comportará como se espera:

incrementCount() {
  // Nota: esto *no* funcionará como se espera.
  this.setState({count: this.state.count + 1});
}

handleSomething() {
  // Digamos que `this.state.count` se inicia en 0.
  this.incrementCount();
  this.incrementCount();
  this.incrementCount();
  // Cuando React rerenderiza el componente, `this.state.count` será 1, pero tu esperabas 3.

  // Esto es porque la función anterior `incrementCount()` lee de `this.state.count`,
  // pero React no actualiza `this.state.count` hasta que el componente se vuelve a renderizar.
  // Entonces `incrementCount()` termina leyendo `this.state.count` como 0 cada vez, y lo establece a 1.

  // ¡La solución se describe a continuación!
}

Ve a continuación cómo solucionar este problema.

¿Cómo actualizo el estado con valores que dependen del estado actual?

Pasa una función en lugar de un objeto a setState para asegurarte de que la llamada siempre use la versión más actualizada del estado (ver más abajo).