Repaso
English
Frontend y webIntermedioFE-11

¿Por qué esto no vuelve a renderizar?

const [items, setItems] = useState([]);
function add(x) {
  items.push(x);
  setItems(items);
}

Opciones

  1. useState no puede guardar arrays, solo primitivos
  2. Se pasa la misma referencia del array, así que React lo omite (Opción correcta)
  3. push es asíncrono en JavaScript
  4. Hay que hacer await de setItems antes del push

Respuesta

Se pasa la misma referencia del array; React compara con Object.is y omite la actualización. Crea un array nuevo: setItems([...items, x])

Por qué

React decide si vuelve a renderizar comprobando si el estado nuevo es un objeto distinto del antiguo.

push cambia el array existente, así que setItems(items) pasa el MISMO array, React no ve ningún cambio y no hace nada.

Crea siempre un array u objeto nuevo: setItems(prev => [...prev, x]).

Recuerda

Nunca mutes el estado de React; crea una copia nueva.

Términos clave

Practica esta pregunta en Repaso