Skip to main content

Інші хуки всередині кастомного хука

Ключова ідея

Кастомний хук - це звичайна функція, яка використовує всередині себе інші хуки (useState, useEffect, useMemo, useRef, useCallback і навіть інші кастомні хуки).

React не робить різниці між "вбудованими" хуками і власними: головне - дотримуватися тих самих правил хуків.


Так, можна - приклад

javascript
function useCounter(initial = 0) { const [count, setCount] = useState(initial); useEffect(() => { console.log("Лічильник змінився:", count); }, [count]); const inc = () => setCount((c) => c + 1); const dec = () => setCount((c) => c - 1); return { count, inc, dec }; }

Тут useCounter використовує одразу два вбудовані хуки:

  • useState для зберігання стану,
  • useEffect для відстеження змін.

І React сприймає це абсолютно нормально.


Можна використовувати інші кастомні хуки

javascript
function useUserData(userId) { const data = useFetch(`/api/users/${userId}`); const online = useOnlineStatus(); return { ...data, online }; }

useUserData використовує два інших кастомних хуки (useFetch і useOnlineStatus) - і це повністю коректно.

Таким чином, хуки можна комбінувати, створюючи цілі рівні перевикористовуваної логіки - як "шари" Lego.


Важливо дотримуватися правил хуків

ПравилоЧому важливо
Хук має починатися з useReact визначає хуки за назвою
Викликати хуки лише на верхньому рівніЩоб порядок викликів не порушувався
Не можна викликати хуки всередині умов, циклів, функційReact відстежує їхній порядок за стеком викликів
Хуки можна викликати лише всередині функцій-компонентів або інших хуківПоза React-контекстом вони не працюють

Приклад помилки

javascript
function useExample(flag) { if (flag) { // Помилка! useState викликається умовно const [count, setCount] = useState(0); } }

React видасть помилку:

javascript
Invalid hook call. Hooks can only be called inside the body of a function component.

Правильно:

javascript
function useExample(flag) { const [count, setCount] = useState(0); if (flag) { // тепер можна використовувати значення count } }

Підсумок

ПитанняВідповідь
Чи можна використовувати інші хуки всередині кастомного хука?Так, можна - і це основне призначення кастомних хуків
Які хуки можна використовуватиБудь-які: вбудовані (useState, useEffect, …) і навіть інші кастомні
Які обмеженняДотримуйся правил хуків: не викликати в умовах, лише на верхньому рівні
Навіщо це потрібноЩоб перевикористовувати логіку і будувати хуки на основі інших - як конструктор

Головна ідея:

Кастомні хуки - це спосіб комбінувати вбудовані хуки, створюючи перевикористовувану, чисту і передбачувану логіку.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.