Custom hook — функция useXxx(), внутри которой вызываются другие хуки. Переиспользует логику между компонентами: useFetch, useLocalStorage, useDebounce.
Правила хуков: вызывать только на верхнем уровне, не в if/циклах. Имя с use — соглашение для ESLint.
Хук возвращает state и функции — компонент остаётся «тонким».
function useFetch(url) {
const [data, setData] = useState(null)
useEffect(() => {
fetch(url).then(r => r.json()).then(setData)
}, [url])
return data
}const posts = useFetch('/api/posts')Книга, игра и упражнения доступны без регистрации. Видеоуроки — после оплаты курса.