¿Por qué esto no vuelve a renderizar?
const [items, setItems] = useState([]);
function add(x) {
items.push(x);
setItems(items);
}Opciones
useStateno puede guardar arrays, solo primitivos- Se pasa la misma referencia del array, así que React lo omite (Opción correcta)
pushes asíncrono en JavaScript- Hay que hacer await de
setItemsantes 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.