El hook useReducer en React es una alternativa a useState que se utiliza para gestionar estados más complejos en componentes funcionales. Es útil cuando se tiene lógica de actualización que involucra múltiples valores o cuando el estado depende de acciones previas. Funciona con un patrón similar a Redux, utilizando acciones y un reducer para definir cómo cambia el estado.
useReducer y cuándo usarlo?
useReducer es un hook que permite gestionar el estado utilizando un patrón de reducer y dispatch. Es ideal cuando se trabaja con lógica de estado que requiere múltiples subvalores, dependencias en acciones anteriores o cuando se desea hacer más legible el código separando la lógica de actualización en una función externa.
La estructura básica de useReducer se compone de tres elementos:
1. Reducer: Una función pura que toma el estado y una acción como parámetros, y devuelve un nuevo estado.
2. Acción: Un objeto que describe el tipo de cambio que se debe realizar en el estado.
3. Dispatch: Una función que se usa para enviar las acciones al reducer.
useReducer
import React, { useReducer } from 'react';
const initialState = { count: 0 };
function reducer(state, action) {
switch (action.type) {
case 'increment':
return { count: state.count + 1 };
case 'decrement':
return { count: state.count - 1 };
default:
return state;
}
}
function Counter() {
const [state, dispatch] = useReducer(reducer, initialState);
return (
<div>
<p>Count: {state.count}</p>
<button onClick={() => dispatch({ type: 'increment' })}>Increment</button>
<button onClick={() => dispatch({ type: 'decrement' })}>Decrement</button>
</div>
);
}
export default Counter;
En este ejemplo, useReducer inicializa el estado con initialState y permite que el estado cambie a través de las acciones increment y decrement.
useReducer en lugar de useState?
reducer).
useReducer en React
1. Gestión de formularios complejos: useReducer es útil para manejar múltiples campos en un formulario y sus validaciones.
2. Estado global del componente: Cuando se necesita compartir un estado complejo entre componentes anidados.
Puedes encontrar más detalles sobre el uso de useReducer en la documentación oficial de React.
Jorge García
Fullstack developer