Skip to content

React Hooks пояснені

React-хуки для щоденної роботи, згруповані за призначенням: утримання стану, виконання ефектів, мемоізація обчислень, спільний контекст і вихід за межі рендера. Кожен рядок поєднує хук із тим, для чого він потрібен.

Хук — це функція, яка дозволяє функціональному компоненту отримати доступ до можливостей React: стан, життєвий цикл, контекст і налаштування продуктивності. Два правила: викликайте хуки на верхньому рівні (ніколи в циклах чи умовах) і викликайте їх лише з функцій React. Решта — це вибір правильного хука для завдання.

Довідкова таблиця · 24 записи
24 of 24 rows
Стан
Зберігає одне значення, зміна якого викликає повторний рендер.Локальний стан компонента: поля форм, перемикачі, лічильники.
Зберігає стан, керований reducer-ом дій, — схожий на маленький store.Стан із кількома пов'язаними полями або складними переходами.
Зберігає змінне значення, яке НЕ викликає повторного рендера.Змінні контейнери, таймери та прямий доступ до DOM через .current.
Ефекти
Виконує побічний ефект після рендера з необов'язковим очищенням.Завантаження даних, підписки та синхронізація із зовнішньою системою.
Функція, яку повертає ефект, виконується перед наступним ефектом і ще раз під час демонтування.Закриття підписок і таймерів або переривання виконуваного запиту.
Як useEffect, але спрацьовує синхронно після зміни DOM.Читання або запис розкладки до фарбування браузером (тости, підказки).
Обробники подій виконуються у відповідь на дію користувача; ефекти виконуються після рендера для синхронізації.Логіка, спричинена користувачем, належить обробнику; спричинена рендером — ефекту.
У розробці монтує компоненти двічі, тож ефекти виконуються, очищаються і виконуються знову.Виявлення подвійних підписок і відсутнього очищення до продакшену.
Продуктивність
Кешує обчислене значення, доки не зміняться його залежності.Уникнення дорогих повторних обчислень між рендерами; змініть значення в залежностях навмисно, щоб скинути кеш.
Кешує посилання на функцію, доки не зміняться її залежності.Стабільні колбеки, що передаються в мемоізовані дочірні компоненти або використовуються як залежності.
Пропускає повторний рендер компонента, чий пропи не змінилися.Важкі дочірні компоненти; коли поверхневої рівності недостатньо, передайте функцію порівняння другим аргументом (це HOC, а не хук).
Контекст та зовнішні дескриптори
Читає значення контексту без prop drilling.Тема, локаль або авторизований користувач, спільні для всього дерева.
Налаштовує екземпляр, який батьківський компонент бачить через ref.Відкриття вузького API з дочірнього компонента через forwardRef.
Конкурентність та інші
Позначає оновлення стану як нетермінове, тож інтерфейс залишається чутливим.Утримання швидкого вводу, поки важкий список рендериться повторно.
Відкладає значення, щоб оновлення можна було перервати.Дебаунс дорогих рендерів без таймерів.
Генерує стабільний унікальний id для атрибутів доступності.Зв'язування label і input між серверним і клієнтським рендерами.
Читає promise або контекст під час рендера; це єдиний хук, який можна викликати умовно.Розгортання promise за допомогою Suspense або читання контексту всередині раннього return.
Зберігає стан, керований дією форми, і включає прапорець pending.Надсилання форм, що повертають помилки або оновлений стан для показу в рядку.
Одразу рендерить оптимістичне значення, а коли дія завершується, повертається до справжнього стану.Показ лайка або надісланого повідомлення, поки запит до сервера ще виконується.
Читає стан pending навколишнього <form>, без жодних пропів.Кнопка надсилання, що вимикає себе, поки батьківська форма надсилається.
Підписується на store поза React і читає один узгоджений знімок.Браузерні API на кшталт статусу онлайн або сторонні сховища стану.
Працює перед layout-ефектами; створений для вставлення правил CSS-in-JS.Бібліотеки стилів, які мають вставити правила до читання розкладки.
Показує власну мітку для внутрішнього стану хука в React DevTools.Маркування того, що тримає власний хук, під час налагодження.
Ваш власний хук, що компонує вбудовані хуки для спільного використання логіки.Багаторазова поведінка зі станом на кшталт useFetch або useMediaQuery.