Хуки React: useState, useEffect та інші – зрозуміле пояснення
Коротко: Хуки — функції, за допомогою яких компоненти React використовують стан і побічні ефекти; useState зберігає значення, useEffect виконується після відображення, користувацькі хуки об’єднують логіку.
Докладніше: У React компоненти — функції, які описують інтерфейс. З хуками (з React 16.8) вони отримують пам’ять і реакції на події без класів. Правила: викликайте хуки на верхньому рівні компонента і лише в компонентах чи користувацьких хуках.
Подробиці
useState: стан
function Counter() {
const [n, setN] = useState(0);
return <button onClick={() => setN(n + 1)}>Clicked: {n}</button>;
}Коли стан змінюється через setN, React заново відображає компонент. Ніколи не змінюйте стан напряму (n++, list.push), замість цього задавайте нові значення (setList([...list, x])). Якщо залежите від старого значення: setN(v => v + 1).
useEffect: побічні ефекти
useEffect(() => {
const id = setInterval(tick, 1000);
return () => clearInterval(id); // очищення
}, [tick]); // залежностіДля речей поза React: завантаження даних, таймери, слухачі подій, заголовок документа. Масив залежностей вирішує, коли ефект виконається знову ([] = один раз після першого відображення). Функція очищення запобігає витокам. Уникайте ефектів там, де достатньо обчислення під час відображення; дані краще завантажувати через серверні компоненти, TanStack Query чи SWR.
Інші важливі хуки
- useRef: змінюване значення/доступ до DOM без перемальовування.
- useMemo / useCallback: кешують результати/функції (лише за реальних проблем із продуктивністю).
- useContext: значення без передавання через усі рівні.
- useReducer: складний стан з діями.
- useTransition / useDeferredValue: зберігають плавність вводу.
- Користувацькі хуки (
useOnline(),useLocalStorage()) об’єднують логіку багаторазового використання.
Типові помилки
- Нескінченний цикл: встановлення стану в ефекті без відповідних залежностей.
- Застаріле замикання: забуті залежності; використовуйте правило ESLint
react-hooks/exhaustive-deps. - Похідний стан? Тоді обчислюйте, а не зберігайте.
- Піднімайте стан угору замість дублювання.
- Обирайте ключі у списках стабільно.
Практикуйтеся: невеликі проєкти (список справ, лічильник, фільтр пошуку) і офіційна документація на react.dev.
Див. також: React, Next.js App Router, TypeScript, Події