Los Custom Hooks son una nueva incorporación en React 16.8. Te permiten usar estado y otras características (por ejemplo, la lógica) sin tener que escribir una clase.
Vamos a ver como se usa con el típico ejemplo del clásico contador, donde podemos sumar o restar números de una cuenta que le pasamos por parámetro.
Primero voy a presentar el custom hook, tal como quedaría, para luego explicar cada concepto y su aplicación en un componente:
import { useState } from "react";
function useCounter(intialeCount) {
const [count, setCount] = useState(intialeCount);
const handleIncrement = () => {
setCount((prevCount) => prevCount + 1);
};
const handleDecrement = () => {
setCount((prevCount) => Math.max(0, prevCount - 1));
};
return { count, handleIncrement, handleDecrement };
}
export { useCounter };
Por un lado nos generamos una variable de estado (
count
) que almacenará el valor del contador. Y por otro lado definimos dos acciones en constantes que se encargarán de incrementar (handleIncrement
) o decrementar (handleDecrement
) el contador.
Bien, con esto ya tenemos nuestro custom hook que manejará el estado y la lógica que el componente presentacional necesitará.
Su uso sería así de sencillo en un componente:
import { useCounter } from "./useCounter";
export default function App() {
const { count, handleIncrement, handleDecrement } = useCounter(0);
return (
<>
<h1>{count}</h1>
<button onClick={handleIncrement}>Sumar +1</button>
<button onClick={handleDecrement}>Restar -1</button>
</>
);
}
Importamos el custom hook (
useCounter
) y destructuramos los parámetros/funciones que nos interesan, en este caso el estado del contador (count
) y las dos funciones para cambiar el estado del mismo (handleIncrement
yhandleDecrement
).
Como verás, separar la lógica y el estado del componente encargado de presentar la información, no es complicado.
use
, por ejemplo, use
Counter.NO comparten estado
. Los Custom Hooks son un mecanismo para reutilizar lógica de estado, pero cada vez que usas uno todo estado y efecto dentro de este son aislados completamente.Tienes mucha más información sobre los hooks personalizados en la página oficial de React.
Puedes ver el ejemplo en este codesandbox.
Y esto es todo. Espero que te pueda servir 🙃