Volver a la lista

useState: el punto de partida para la gestión del estado en React

Explica el funcionamiento interno de `useState` en React, las reglas de actualización de estado y los errores más comunes.

Principiante
|
5min
|
Verificado (2026-07)
Progreso0/55 (0%)

useState: El inicio de la gestión de estado en React

Al finalizar este tema

Comprenderá cómo crear y actualizar estados con useState, así como el principio por el cual se producen los re-renderizados.


No es posible con variables comunes

javascript
function Counter() {
  let count = 0;

  function handleClick() {
    count += 1;
    console.log(count); // 1, 2, 3... sube
  }

  return <button onClick={handleClick}>{count}</button>;
  // En pantalla siempre es 0
}

count aumenta, pero la pantalla no se actualiza. React no detecta los cambios en variables comunes. Para actualizar la pantalla, debes informar a React que "el estado ha cambiado".


useState

javascript
import { useState } from "react";

function Counter() {
  const [count, setCount] = useState(0);

  return (
    <button onClick={() => setCount(count + 1)}>
      {count}
    </button>
  );
}

useState(0) devuelve dos elementos:

  • count: el valor del estado actual
  • setCount: la función para actualizar el estado

Al llamar a setCount, React vuelve a renderizar el componente. La pantalla se redibuja con el nuevo valor de count.


La actualización del estado es asíncrona

javascript
function handleClick() {
  setCount(count + 1);
  console.log(count); // ¡Aún el valor anterior!
}

Llamar a setCount no cambia count de inmediato. El nuevo valor se reflejará en el siguiente renderizado.

Al actualizar basándose en el valor anterior, se utiliza una actualización funcional:

javascript
setCount(prev => prev + 1);

prev recibe el valor más reciente. Es preciso incluso tras realizar llamadas consecutivas:

javascript
setCount(prev => prev + 1);
setCount(prev => prev + 1);
setCount(prev => prev + 1);
// count aumenta en 3

Estado de objetos y arreglos

javascript
const [user, setUser] = useState({ name: "Alice", age: 25 });

// Mal ejemplo: modificación directa
user.age = 26; // React no detecta el cambio
setUser(user); // No hay re-renderizado porque la referencia es la misma

// Buen ejemplo: crear un nuevo objeto
setUser({ ...user, age: 26 });

React verifica si la referencia ha cambiado. Si se modifica el objeto existente, la referencia sigue siendo la misma y no se detecta el cambio. Debe crear un nuevo objeto utilizando el operador spread.

Lo mismo ocurre con los arreglos:

javascript
const [items, setItems] = useState(["a", "b"]);

// Agregar
setItems([...items, "c"]);

// Eliminar
setItems(items.filter(item => item !== "b"));

// Modificar
setItems(items.map(item => item === "a" ? "A" : item));

No se utilizan métodos de mutación originales como push o splice.


Múltiples useState

javascript
const [name, setName] = useState("");
const [age, setAge] = useState(0);
const [isActive, setIsActive] = useState(false);

Los estados no relacionados se declaran por separado. Los valores que siempre cambian juntos pueden agruparse en un solo objeto.


Conceptos clave

useState agrega estado a los componentes de React y provoca un re-renderizado al llamar a setState. Dado que las actualizaciones de estado son asíncronas, para las actualizaciones basadas en el valor anterior, use la forma funcional (prev => ...). Para estados de objetos o arreglos, no debe modificar el original, sino crear uno nuevo.

💬 Preguntas y comentarios

0 comentarios

Puedes publicar sin iniciar sesión. Los comentarios de invitados no pueden editarse ni eliminarse después.

0/2000

Cargando...