Що таке кастомні хуки в React
Користувацькі хуки — це власні функції, які використовують вбудовані хуки React (useState, useEffect, useMemo тощо) для інкапсуляції та повторного використання логіки в різних компонентх.
Головне правило: ім'я користувацького хуку повинно починатися з use, щоб React розумів, що це хук, і застосовував відповідні правила.
Чому Користувацькі Хуки?
Інкапсуляція логіки
Ви можете вилучити пов'язану бізнес-логіку (наприклад, робота з API, форми, таймери) в окремий хук і використовувати його в кількох місцях.
Уникнення дублювання
Замість того, щоб повторювати один і той же useEffect або useState в кількох компонентх, ви пишете хук один раз і повторно його використовуєте.
Поліпшення читабельності
Компоненти стають меншими та чистішими, якщо основна логіка вилучена в хуки.
Простий Приклад Користувацького Хука
До: без користувацького хуку
function Component() {
const [width, setWidth] = useState(window.innerWidth);
useEffect(() => {
const handleResize = () => setWidth(window.innerWidth);
window.addEventListener("resize", handleResize);
return () => window.removeEventListener("resize", handleResize);
}, []);
return <p>Ширина: {width}px</p>;
}Після: з користувацьким хуком
function useWindowWidth() {
const [width, setWidth] = useState(window.innerWidth);
useEffect(() => {
const handleResize = () => setWidth(window.innerWidth);
window.addEventListener("resize", handleResize);
return () => window.removeEventListener("resize", handleResize);
}, []);
return width;
}
// Використання
function Component() {
const width = useWindowWidth();
return <p>Ширина: {width}px</p>;
}Де Використовуються Користувацькі Хуки
- Робота з API (наприклад,
useFetch,useUserData) - Управління формами (
useForm,useInput) - Стан модальних вікон, підказок (
useModal) - Робота з локальним сховищем (
useLocalStorage) - Таймери, інтервали (
useInterval,useDebounce) - Інтеграція з зовнішніми бібліотеками (
useSocket,useMap)
Приклад Хука useLocalStorage
function useLocalStorage(key, initialValue) {
const [value, setValue] = useState(() => {
const item = localStorage.getItem(key);
return item ? JSON.parse(item) : initialValue;
});
useEffect(() => {
localStorage.setItem(key, JSON.stringify(value));
}, [key, value]);
return [value, setValue];
}
// Використання
const [theme, setTheme] = useLocalStorage("theme", "light");Висновок:
Користувацькі хуки роблять ваш код повторно використовуваним, читабельним та чистим. Вони допомагають вилучити повторювану логіку з компонентів та організувати архітектуру програми.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.