Los Hooks son funciones especiales que te permiten “engancharte” a características de React desde componentes funcionales. Fueron introducidos en React 16.8 para permitir usar estado y otras características de React sin escribir componentes de clase.
El Hook de Estado (useState) es una función de React que te permite agregar estado local a los componentes funcionales.
Antes de la introducción de los hooks en React 16.8, solo los componentes de clase podían tener estado.
useState hace que sea fácil manejar y actualizar el estado dentro de los componentes funcionales.
import { useState } from 'react';
function ComponenteConEstado() {
const [estado, setEstado] = useState(valorInicial);
} import React, { useState } from 'react';
function Interruptor() {
// Estado inicial: apagado (false)
const [encendido, setEncendido] = useState(false);
// Función para cambiar el estado
const manejarClick = () => {
setEncendido(!encendido);
};
return (
<div>
<p>El interruptor está {encendido ? 'Encendido' : 'Apagado'}</p>
<button onClick={manejarClick}>
{encendido ? 'Apagar' : 'Encender'}
</button>
</div>
);
}
export default Interruptor; encendido: Guarda si el interruptor está encendido o apagado.setEncendido: Cambia el valor de encendido al hacer clic en el botón.encendido (ya sea “Encendido” o “Apagado”).useStateimport React, { useState } from 'react';
function Seleccionador() {
// Estado para almacenar el valor seleccionado
const [seleccion, setSeleccion] = useState('');
// Función que se ejecuta cuando el valor cambia
const manejarCambio = (evento) => {
setSeleccion(evento.target.value);
};
return (
<div>
<label htmlFor="opciones">Elige una opción:</label>
<select id="opciones" value={seleccion} onChange={manejarCambio}>
<option value="">--Seleccione--</option>
<option value="opcion1">Opción 1</option>
<option value="opcion2">Opción 2</option>
<option value="opcion3">Opción 3</option>
</select>
<p>Has seleccionado: {seleccion}</p>
</div>
);
}
export default Seleccionador; seleccion: Estado que almacena el valor actualmente seleccionado de la lista select.setSeleccion: Función que actualiza el estado cuando el usuario cambia la opción en el select.onChange: Event handler que se ejecuta cada vez que el usuario selecciona una nueva opción. Captura el valor con evento.target.value y lo actualiza en el estado.Este ejemplo usa el hook useState para alternar la visibilidad de un contenido. El estado isVisible determina si se muestra un texto dentro de un <div>.
El botón cambia su texto entre “Mostrar” y “Ocultar” y, al hacer clic, cambia el valor de isVisible para mostrar u ocultar el contenido.
function ToggleComponent() {
const [isVisible, setIsVisible] = useState(false);
return (
<div>
<button onClick={() => setIsVisible(!isVisible)}>
{isVisible ? 'Ocultar' : 'Mostrar'}
</button>
{isVisible && (
<div>
¡Este contenido se puede mostrar u ocultar!
</div>
)}
</div>
);
} useState en ReactUsar la función de actualización setContador(prevContador => ...) garantiza que obtendrás el valor más reciente del estado, evitando posibles inconsistencias si la actualización es asíncrona.
// Incorrecto
setContador(contador + 1);
// Correcto
setContador(prevContador => prevContador + 1); Es importante no modificar directamente el estado. Usar setContador() garantiza que React maneje la actualización correctamente.
// Incorrecto
contador = contador + 1; // Esto no actualizará el estado correctamente
// Correcto
setContador(contador + 1); // Esto actualizará el estado correctamente Evitar actualizar el estado en un ciclo o sin un control adecuado de dependencias, ya que puede generar ciclos infinitos y actualizaciones innecesarias.
// Incorrecto
useEffect(() => {
setContador(contador + 1); // Esto generará un ciclo infinito
});
// Correcto
useEffect(() => {
setContador(c => c + 1); // Esto previene el ciclo infinito
}, []); // Dependencias vacías, se ejecuta solo una vez Cuando actualices el estado basado en una condición, siempre usa una función de actualización para asegurar que el estado se calcule correctamente.
// Incorrecto
if (contador > 5) {
setContador(contador + 1); // Esto puede no ser seguro si el contador cambia rápidamente
}
// Correcto
if (contador > 5) {
setContador(prevContador => prevContador + 1); // Esto asegura que se use el valor más reciente
} Recuerda que las actualizaciones de estado no son sincrónicas. No dependas de que el estado se actualice inmediatamente después de llamar a setState().
// Incorrecto
setContador(contador + 1);
console.log(contador); // Esto no mostrará el valor actualizado inmediatamente
// Correcto
setContador(contador + 1);
setTimeout(() => {
console.log(contador); // Utiliza un efecto o método para ver el valor actualizado
}, 0); Te invito a visitar nuestra guía paso a paso sobre el Hook useState en ReactJS, donde encontrarás ejemplos claros y prácticos para entender mejor cómo funciona el Hook useEffect y cómo aplicarlo en proyectos reales.