You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: content/docs/hooks-rules.md
+16-16Lines changed: 16 additions & 16 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,13 +6,13 @@ next: hooks-custom.html
6
6
prev: hooks-effect.html
7
7
---
8
8
9
-
*Хуки* — це нововведення в React 16.8. Вони дозволяють вам використовувати стан та інші можливості React без написання класів.
9
+
*Хуки* — це нововведення React 16.8. Вони дозволяють вам використовувати стан та інші можливості React без написання класів.
10
10
11
-
Хуки — звичайні JavaScriptфункції, але ви маєте дотримуватися двох правил, використовуючи їх. Ми зробили [плагін для лінтеру](https://www.npmjs.com/package/eslint-plugin-react-hooks), щоб автоматично дотримуватися цих правил:
11
+
Хуки — звичайні JavaScript-функції, але використовуючи їх, ви маєте дотримуватися двох правил. Ми зробили [плагін для лінтера](https://www.npmjs.com/package/eslint-plugin-react-hooks), щоб автоматично дотримуватися цих правил:
12
12
13
-
### Використовуйте хуки тільки на вищому рівні {#only-call-hooks-at-the-top-level}
13
+
### Використовуйте хуки тільки на найвищому рівні {#only-call-hooks-at-the-top-level}
14
14
15
-
**Не використовуйте хуки усередині циклів, умовних операторів або вкладених функцій.**Замість цього завжди використовуйте хуки на вищому рівні React-функцій. Дотримуючись цього правила, ви будете певні, що хуки викликаються в однаковій послідовності кожного разу, коли рендериться компонент. Це дозволяє React коректно зберігати стан хуків між численними викликами `useState` та `useEffect`. (Якщо вам цікаво, то ми пояснимо це більш детально [нижче](#explanation).)
15
+
**Не використовуйте хуки усередині циклів, умовних операторів або вкладених функцій.**Натомість, завжди використовуйте хуки на найвищому рівні React-функцій. Дотримуючись цього правила, ви будете певні, що хуки викликаються в однаковій послідовності кожного разу, коли рендериться компонент. Це дозволяє React коректно зберігати стан хуків між численними викликами `useState` та `useEffect`. (Якщо вам цікаво, то ми пояснимо це більш детально [нижче](#explanation).)
16
16
17
17
### Викликайте хуки лише з React-функцій {#only-call-hooks-from-react-functions}
18
18
@@ -21,13 +21,13 @@ prev: hooks-effect.html
21
21
* ✅ Викликати хуки з функціонального компоненту React.
22
22
* ✅ Викликати хуки з користувацьких хуків (ми навчимося це робити [на наступній сторінці](/docs/hooks-custom.html)).
23
23
24
-
Дотримуючись цього правила, ви можете бути певні, що вся логіка компоненту зі станом чітко проглядається в його вихідному коді.
24
+
Дотримуючись цього правила, ви можете бути певні, що вся логіка компонента зі станом чітко проглядається в його джерельному коді.
25
25
26
26
## Плагін для ESLint {#eslint-plugin}
27
27
28
-
Ми випустили плагін для ESLint [`eslint-plugin-react-hooks`](https://www.npmjs.com/package/eslint-plugin-react-hooks), який примушує дотримуватися цих двох правил. Ви можете додати цей плагін до вашого проекту, якщо ви хочете його спробувати:
28
+
Ми випустили плагін для ESLint [`eslint-plugin-react-hooks`](https://www.npmjs.com/package/eslint-plugin-react-hooks), який примушує дотримуватися цих двох правил. Ви можете додати цей плагін до свого проекту, якщо ви хочете його спробувати:
29
29
30
-
This plugin is included by default in[Create React App](/docs/create-a-new-react-app.html#create-react-app).
30
+
Цей плагін використовується за замовчуванням у[Create React App](/docs/create-a-new-react-app.html#create-react-app).
**Ви можете пропустити залишок сторінки та перейти до наступної, яка пояснює як писати [користувацькі хуки](/docs/hooks-custom.html).** На цій сторінці ми продовжимо і надамо пояснення необхідності цих правил.
51
+
**Ви можете пропустити залишок сторінки та перейти до наступної, яка пояснює як писати [користувацькі хуки](/docs/hooks-custom.html).** На цій сторінці ми продовжимо і пояснимо необхідність цих правил.
52
52
53
53
## Пояснення {#explanation}
54
54
55
-
Як ми [дізналися раніше](/docs/hooks-state.html#tip-using-multiple-state-variables), в одному компоненті можна багаторазово використовувати хуки стану або ефектів:
55
+
Як ми [дізналися раніше](/docs/hooks-state.html#tip-using-multiple-state-variables), в одному компоненті можна використовувати декілька хуків стану або ефектів:
// 4. Використовуємо ефект, щоб оновити заголовок сторінки
@@ -76,7 +76,7 @@ function Form() {
76
76
}
77
77
```
78
78
79
-
Отже, як React дізнається який стан відповідає певному виклику `useState`? Відповідь наступна: **React покладається на послідовність викликів хуків**. Наш приклад працює тому, що послідовність викликів хуків є сталою для кожного рендеру:
79
+
Отже, як React дізнається, який стан відповідає певному виклику `useState`? Відповідь наступна: **React покладається на послідовність викликів хуків**. Наш приклад працює тому, що послідовність викликів хуків є сталою для кожного рендеру:
Доки послідовність викликів хуків залишається сталою між рендерами, React може співвідносити локальний стан між кожним з них. Але, що трапиться, якщо ми розмістимо виклик хуку (наприклад, ефект `persistForm`) всередину умовного оператору?
101
+
Доки послідовність викликів хуків залишається сталою між рендерами, React може співвідносити локальний стан з кожним із них. Але що трапиться, якщо ми розмістимо виклик хуку (наприклад, ефект `persistForm`) всередину умовного оператору?
102
102
103
103
```js
104
104
// 🔴 Ми порушуємо перше правило, розміщуючи хук всередині умовного оператору
useEffect(updateTitle) // 🔴 3 (but was 4). Помилка при зміні ефекту
119
119
```
120
120
121
-
React не знатиме, що повернути для другого виклику хуку `useState`. React очікував, що другий виклик хуку в цьому компоненті відповідає ефекту `persistForm` так само як і під час попереднього рендеру, але це більше не так. З цього моменту кожен наступний виклик хуку після того, що ми пропустили, також зміститься на один, що призведе до помилок.
121
+
React не знатиме, що повернути для другого виклику хуку `useState`. React очікував, що другий виклик хуку в цьому компоненті відповідає ефекту `persistForm` так само як і під час попереднього рендеру, але це більше не так. З цього моменту кожен наступний виклик хуку після того, що ми пропустили, також зміститься на одиницю, що призведе до помилок.
122
122
123
-
**Ось чому хуки мають викликатися на вищому рівні наших компонентів.** Якщо ми хочемо викликати ефект за певної умови, то ми можемо розмістити цю умову *всередину* нашого хуку:
123
+
**Ось чому хуки мають викликатися на найвищому рівні наших компонентів.** Якщо ми хочемо викликати ефект за певної умови, то ми можемо розмістити цю умову *всередині* нашого хуку:
124
124
125
125
```js
126
126
useEffect(functionpersistForm() {
@@ -131,8 +131,8 @@ React не знатиме, що повернути для другого вик
131
131
});
132
132
```
133
133
134
-
**Зауважте, що вам не потрібно буде піклуватися про цю проблему, якщо ви додасте до вашого проекту [запропоноване правило для лінтера](https://www.npmjs.com/package/eslint-plugin-react-hooks).** Але тепер ви знаєте, *чому* хуки працюють таким чином, та які проблеми можна запобігти використовуючи це правило.
134
+
**Зауважте, що вам не потрібно буде піклуватися про цю проблему, якщо ви додасте до вашого проекту [запропоноване правило для лінтера](https://www.npmjs.com/package/eslint-plugin-react-hooks).** Але тепер ви знаєте, *чому* хуки працюють таким чином, та яким проблемам можна запобігти, використовуючи це правило.
135
135
136
136
## Наступні кроки {#next-steps}
137
137
138
-
Нарешті ми можемо почати вчитися тому, [як писати користувацькі хуки](/docs/hooks-custom.html)! Хуки користувача дозволять вам комбінувати хуки впроваджені React з вашими власними абстракціями та повторно використовувати загальну логіку стану між різними компонентами.
138
+
Нарешті ми можемо почати вчитися тому, [як писати користувацькі хуки](/docs/hooks-custom.html)! Хуки користувача дозволять вам комбінувати хуки, впроваджені React, з вашими власними абстракціями, та повторно використовувати одну й ту ж логіку стану в різних компонентах.
0 commit comments