Skip to content

Commit 1883ce1

Browse files
committed
Виправлено прикладки
1 parent 4d4e879 commit 1883ce1

File tree

1 file changed

+7
-9
lines changed

1 file changed

+7
-9
lines changed

src/content/reference/react/useEffect.md

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ function ChatRoom({ roomId }) {
4444
4545
#### Параметри {/*parameters*/}
4646
47-
* `setup` (з англ. встановлюючий): Функція з логікою вашого ефекту. Ваша функція `setup` може додатково повертати *cleanup* функцію (з англ. cleanup - прибирання). Після того, як ваш компонент буде додано в DOM, React виконає функцію `setup`. Потім після кожного наступного рендеру React буде перевіряти чи змінилось значення хоча б однієї із залежностей, і якщо значення хоча б однієї залежності змінилось, то React спочатку виконає *cleanup*-функцію (якщо ви її надали) зі старими значеннями, а потім знову виконає `setup` функцію із новими значеннями. Після видалення компонента з DOM React виконає *cleanup*-функцію.
47+
* `setup` (з англ. встановлюючий): Функція з логікою вашого ефекту. Ваша функція `setup` може додатково повертати *cleanup*-функцію (з англ. cleanup - прибирання). Після того, як ваш компонент буде додано в DOM, React виконає функцію `setup`. Потім після кожного наступного рендеру React буде перевіряти чи змінилось значення хоча б однієї із залежностей, і якщо значення хоча б однієї залежності змінилось, то React спочатку виконає *cleanup*-функцію (якщо ви її надали) зі старими значеннями, а потім знову виконає `setup`-функцію із новими значеннями. Після видалення компонента з DOM React виконає *cleanup*-функцію.
4848
4949
* **необов'язковий** `dependencies` (з англ. залежності): Список реактивних значень, від яких залежить код всередині `setup`-функції. Під реактивними значеннями мається на увазі `props`, `state`, а також усі змінні та функції, оголошені безпосередньо в тілі вашого компонента. Якщо ваш лінтер [налаштовано для React](/learn/editor-setup#linting), він буде контролювати, що ви не забули додати до списку жодне з необхідних реактивних значень. Список залежностей має містити фіксовану кількість елементів і бути поданий підряд, наприклад `[dep1, dep2, dep3]`. React порівнюватиме кожну залежність із її попереднім значенням, використовуючи порівняння [`Object.is`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is). Якщо ви не передасте масив залежностей, то ваш Effect виконуватиметься після додавання компонента в DOM та після кожного повторного рендеру компонента. І якщо передасте порожній масив, то ваш Effect виконається лише один раз після додавання компонента в DOM. [Подивитись різницю між передачею масиву залежностей, порожнього масиву та не передаванням нічого.](#examples-dependencies)
5050
@@ -114,8 +114,7 @@ function ChatRoom({ roomId }) {
114114
- Тоді, ваш <CodeStep step={1}>код установки</CodeStep> запускається з новими пропсами та станом.
115115
3. Ваш <CodeStep step={2}>код очистки</CodeStep> виконується ще один, останній раз, коли ваш компонент видаляється з сторінки.
116116
117-
**Давайте опишемо цю чергу використовуючи приклад вище**
118-
117+
**Давайте опишемо цю чергу використовуючи приклад вище**
119118
Коли компонент `ChatRoom` додається на сторінку, він підключається до чату використовуючи первинні значення `serverUrl` та `roomId`. Якщо хоча б одне із цих значень, будь то `serverUrl` чи `roomId` мінється в результаті ререндеру (наприклад якщо користувач обрав інший чат з випадаючого списку), наш ефект *відключиться від попереднього чату, і підключиться до наступного чату.* Після того, як компонент `ChatRoom` буде демонтовано з сторінки, наш ефект відключиться від чату останній раз.
120119
121120
**Щоб [допомогти знайти баги,](/learn/synchronizing-with-effects#step-3-add-cleanup-if-needed) в Strict Mode (з англ. суворий режим) в режимі розробки React умисно зайвий раз запускає <CodeStep step={1}>функцію установки</CodeStep> та <CodeStep step={2}>функцію очистки</CodeStep> перед тим як запустити <CodeStep step={1}>функцію установки</CodeStep>.** Цей стрес-тест допомагає вам або переконатись, що логіка вашого ефекту реалізована правильно, або ж помітити баг ще на етапі розробки (якщо із-за цього "надлишкового" запуску функції установки та функції очистки ваш компонент працює не так, як він мав би). Функція очистки мусить зупиняти або відміняти все, що запустила функція установки. Показник того, що код працює правильно - код має працювати однаково добре незалежно від того чи було запущено *функцію установки* один раз, чи було запущено *функцію установки*, потім *функцію очистки* і знову *функцію установки*. [Дивитись поширені рішення.](/learn/synchronizing-with-effects#how-to-handle-the-effect-firing-twice-in-development)
@@ -386,7 +385,7 @@ export default function App() {
386385
Дізнатись корисний факт
387386
</button>
388387
<ModalDialog isOpen={show}>
389-
Ринок React вакансій перегрітий. Краще учити Angular.
388+
Ринок React-вакансій перегрітий. Краще учити Angular 🙂
390389
<br />
391390
<button onClick={() => {
392391
setShow(false);
@@ -891,7 +890,7 @@ button { margin: 5px; }
891890
892891
</Sandpack>
893892
894-
У цьому прикладі функція очистки не потрібна, оскільки клас `MapWidget` керує лише DOM-вузлом, який був йому переданий. Після того, як реактівський компонента `Map` буде видалено з документа, то обидва, і DOM-вузол, і екземпляр класу `MapWidget` будуть автоматично прибрані **збирачем сміття** (garbage-collector) браузерного рушія JavaScript.
893+
У цьому прикладі функція очистки не потрібна, оскільки клас `MapWidget` керує лише DOM-вузлом, який був йому переданий. Після того, як React-компонент `Map` буде видалено з документа, то обидва, і DOM-вузол, і екземпляр класу `MapWidget` будуть автоматично прибрані **збирачем сміття** (garbage-collector) браузерного рушія JavaScript.
895894
896895
---
897896
@@ -979,7 +978,7 @@ export async function fetchBio(person) {
979978
980979
</Sandpack>
981980
982-
Ви також можете переписати це, використовуючи синтаксис [`async` / `await`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function), але всеодно потрібно надати функцію очищення:
981+
Ви також можете переписати це, використовуючи синтаксис [`async` / `await`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function), але все одно потрібно надати функцію очищення:
983982
984983
<Sandpack>
985984
@@ -998,7 +997,6 @@ export default function Page() {
998997
setBio(result);
999998
}
1000999
}
1001-
10021000
let ignore = false;
10031001
startFetching();
10041002
return () => {
@@ -1046,7 +1044,7 @@ export async function fetchBio(person) {
10461044
- **Ефекти не запускаються на сервері.** Це означає, що початковий HTML, відрендерений сервером, буде містити лише стан завантаження, але без даних. Клієнтський комп'ютер повинен буде завантажити весь JavaScript і відрендерити ваш додаток, лише щоб виявити, що тепер йому потрібно завантажити дані. Це не дуже ефективно.
10471045
- **Отримання даних безпосередньо в ефектах полегшує створення "мережевих водоспадів" (network waterfalls).** Ви рендерите батьківський компонент, він отримує деякі дані, рендерить дочірні компоненти, а потім вони починають отримувати *свої* дані. Якщо мережа не дуже швидка, це значно повільніше, ніж отримання всіх даних паралельно.
10481046
- **Отримання даних безпосередньо в ефектах зазвичай означає, що ви не завантажуєте попередньо і не кешуєте дані.** Наприклад, якщо компонент демонтується, а потім монтується знову, йому доведеться знову отримувати дані.
1049-
- **Це не дуже ергономічно.** Щоб написати виклики fetch так, щоб уникнути багів (наприклад таких, як [стани гонки (race conditions).](https://maxrozen.com/race-conditions-fetching-data-react-with-useeffect)) - треба писати дуже багато шаблонного коду.
1047+
- **Це не дуже ергономічно.** Щоб написати виклики fetch так, щоб уникнути багів (наприклад таких, як [стани гонки (race conditions).](https://maxrozen.com/race-conditions-fetching-data-react-with-useeffect)) - треба писати дуже багато шаблонного коду.
10501048
10511049
Цей список недоліків не є специфічним для React. Він стосується отримання даних при монтуванні з будь-якою бібліотекою. Як і з маршрутизацією, отримання даних не є тривіальним завданням для якісної реалізації, тому ми рекомендуємо наступні підходи:
10521050
@@ -1088,7 +1086,7 @@ function ChatRoom({ roomId }) {
10881086
const connection = createConnection(serverUrl, roomId);
10891087
connection.connect();
10901088
return () => connection.disconnect();
1091-
}, []); // 🔴 React Hook useEffect має пропущені залежності: 'roomId' і 'serverUrl'
1089+
}, []); // 🔴 React-хук useEffect має пропущені залежності: 'roomId' і 'serverUrl'
10921090
// ...
10931091
}
10941092
```

0 commit comments

Comments
 (0)