Skip to content

Commit 6d5eb03

Browse files
committed
Merge branch 'translate-queueing-a-series-of-state-updates' of github.com:undead404/uk.react.dev into translate-queueing-a-series-of-state-updates
2 parents 1f0fee8 + c3a03b0 commit 6d5eb03

File tree

1 file changed

+18
-18
lines changed

1 file changed

+18
-18
lines changed

src/content/learn/queueing-a-series-of-state-updates.md

+18-18
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ title: Додавання до черги низки оновлень стану
44

55
<Intro>
66

7-
Задання змінної стану ставить у чергу ще один рендер. Проте іноді може викинути потреба виконати кілько операцій над значенням, перш ніж додавати до черги новий рендер. Щоб це зробити, корисно розуміти, як React групує оновлення стану.
7+
Задання значення змінній стану ставить у чергу ще один рендер. Проте іноді може виникнути потреба виконати кілька операцій над значенням, перш ніж додавати до черги новий рендер. Щоб це зробити, корисно розуміти, як React групує оновлення стану.
88

99
</Intro>
1010

@@ -55,11 +55,11 @@ setNumber(0 + 1);
5555
setNumber(0 + 1);
5656
```
5757

58-
Але тут грає роль ще один чинник. **React чекає, поки не виконається *ввесь* код у обробниках подій, перш ніж обробляти ваші оновлення стану.** Саме тому повторний рендер відбувається *після* всіх цих викликів `setNumber()`.
58+
Але тут грає роль ще один чинник. **React чекає, поки не виконається *весь* код у обробниках подій, перш ніж обробляти ваші оновлення стану.** Саме тому повторний рендер відбувається *після* всіх цих викликів `setNumber()`.
5959

6060
Це може нагадати офіціанта, що приймає замовлення в ресторані. Він не бігає на кухню, коли названа одна страва! Замість цього він дає змогу зробити замовлення повністю, внести до нього зміни й навіть прийняти замовлення від інших людей за тим же столом.
6161

62-
ʼ<Illustration src="/images/docs/illustrations/i_react-batching.png" alt="Елегантна курсорка в ресторані робить кілька замовлень в бік React, що грає роль офіціанта. Коли вона кілька разів викликає setState(), офіціант записує останнє з запитаного як остаточне замовлення." />
62+
<Illustration src="/images/docs/illustrations/i_react-batching.png" alt="Елегантна курсорка в ресторані робить кілька замовлень у React, що грає роль офіціанта. Коли вона кілька разів викликає setState(), офіціант записує останнє з запитаного як остаточне замовлення." />
6363

6464
Це дає змогу оновлювати кілька змінних стану — навіть з різних компонентів — не запускаючи забагато [повторних рендерів.](/learn/render-and-commit#re-renders-when-state-updates) Але це також означає, що UI не оновиться, поки не завершиться вам обробник події та ввесь код у ньому. Така логіка, також відома як **групування,** робить ваш застосунок на React куди швидшим. Також це позбавляє потреби мати справу з безглуздими "напівготовими" рендерами, в яких оновилась лише частина змінних.
6565

@@ -102,21 +102,21 @@ h1 { display: inline-block; margin: 10px; width: 30px; text-align: center; }
102102
Тут `n => n + 1` зветься **функцією-оновлювачем.** Коли ви передаєте її до сетера стану:
103103

104104
1. React додає цю функцію в чергу до обробки, коли решта коду в обробнику події завершилася.
105-
2. Під час наступного рендеру React йде по черзі та видає остаточний оновлений стан.
105+
2. Під час наступного рендеру React йде чергою та видає остаточний оновлений стан.
106106

107107
```js
108108
setNumber(n => n + 1);
109109
setNumber(n => n + 1);
110110
setNumber(n => n + 1);
111111
```
112112

113-
Ось як React проходить по цих рядках коду, виконуючи обробник подій:
113+
Ось як React проходить цими рядками коду, виконуючи обробник подій:
114114

115115
1. `setNumber(n => n + 1)`: `n => n + 1` — це функція. React додає її до черги.
116-
2. `setNumber(n => n + 1)`: `n => n + 1` — це функція. React додає її до черги.
117-
3. `setNumber(n => n + 1)`: `n => n + 1` — це функція. React додає її до черги.
116+
1. `setNumber(n => n + 1)`: `n => n + 1` — це функція. React додає її до черги.
117+
1. `setNumber(n => n + 1)`: `n => n + 1` — це функція. React додає її до черги.
118118

119-
Коли `useState` викликається під час наступного рендеру, React проходить по черзі. Попередній стан `number` був `0`, і це саме те, що React передає до першої функції-оновлювача як аргумент `n`. Потім React бере повернене значення нашої попередньої функції-оновлювача й передає його до наступного оновлювача як `n`, і так далі:
119+
Коли `useState` викликається під час наступного рендеру, React проходить чергою. Попередній стан `number` був `0`, і це саме те, що React передає до першої функції-оновлювача як аргумент `n`. Потім React бере повернене значення нашої попередньої функції-оновлювача й передає його до наступного оновлювача як `n`, і так далі:
120120

121121
| оновлення в черзі | `n` | повертає |
122122
| ----------------- | --- | ----------- |
@@ -129,7 +129,7 @@ React зберігає `3` як остаточний результат і по
129129
Саме тому клацання "+3" у прикладі вище коректно збільшує значення на 3.
130130
### Що відбудеться, якщо оновити стан, спершу замінивши його {/*what-happens-if-you-update-state-after-replacing-it*/}
131131

132-
Як щодо цього обробника подій? Як гадаєте, чим буде `number` у наступному рендері?
132+
Як щодо цього обробника подій? Як гадаєте, яке значення матиме `number` у наступному рендері?
133133

134134
```js
135135
<button onClick={() => {
@@ -185,7 +185,7 @@ React зберігає `6` як остаточний результат і по
185185

186186
</Note>
187187

188-
### Що станеться, якщо замінити стан, перед тим оновивши його {/*what-happens-if-you-replace-state-after-updating-it*/}
188+
### Що відбудеться, якщо замінити стан, перед тим оновивши його {/*what-happens-if-you-replace-state-after-updating-it*/}
189189

190190
Спробуймо ще один приклад. Як гадаєте, що буде в `number` у наступному рендері?
191191

@@ -246,9 +246,9 @@ React зберігає `42` як остаточний результат і по
246246
* **Функція-оновлювач** (наприклад, `n => n + 1`) додається до черги.
247247
* **Будь-які інші значення** (наприклад, число `5`) додають до черги "замінити на `5`", ігноруючи все, що вже в черзі.
248248

249-
Коли обробник подій завершується, React запускає повторний рендер. Під час нього React обробляє чергу. Функції-оновлювачі запускаються під час рендерингу, тож **функції-оновлювачі повинні бути [чистими](/learn/keeping-components-pure)** й лише *повертати* результат. Не намагайтеся задавати стан зсередини них, чи запускати ще якісь побічні ефекти. У Суворому режимі React намагається запустити кожну функцію-оновлювач двічі (відкидаючи другий результат), щоб допомогти з пошуком помилок.
249+
Коли обробник подій завершується, React запускає повторний рендер. Під час нього React обробляє чергу. Функції-оновлювачі запускаються під час рендерингу, тож **функції-оновлювачі повинні бути [чистими](/learn/keeping-components-pure)** й лише *повертати* результат. Не намагайтеся задавати стан зсередини них чи запускати ще якісь побічні ефекти. У суворому режимі (strict mode) React намагається запустити кожну функцію-оновлювач двічі (відкидаючи другий результат), щоб допомогти з пошуком помилок.
250250

251-
### Домовленості з найменування {/*naming-conventions*/}
251+
### Домовленості про найменування {/*naming-conventions*/}
252252

253253
Прийнято називати аргумент функції-оновлювача за першими літерами відповідної змінної стану:
254254

@@ -258,11 +258,11 @@ setLastName(ln => ln.reverse());
258258
setFriendCount(fc => fc * 2);
259259
```
260260

261-
Якщо вам подобається розлогіший код, то іншим прийнятим підходом є повторити повну назву змінної стану, так `setEnabled(enabled => !enabled)`, або скористатися префіксом так `setEnabled(prevEnabled => !prevEnabled)`.
261+
Якщо вам подобається розлогіший код, то іншим прийнятим підходом є повторити повну назву змінної стану, як `setEnabled(enabled => !enabled)`, або скористатися префіксом, як `setEnabled(prevEnabled => !prevEnabled)`.
262262

263263
<Recap>
264264

265-
* Задання стану не змінить змінної в наявному рендері, проте зробить запит щодо нового рендеру.
265+
* Задання стану не змінить її змінну в наявному рендері, проте зробить запит щодо нового рендеру.
266266
* React обробляє оновлення стану тоді, коли обробники подій уже закінчили виконання. Це зветься групуванням.
267267
* Щоб оновити якийсь стан кілька разів у одній події, можна скористатися функцією-оновлювачем `setNumber(n => n + 1)`.
268268

@@ -278,7 +278,7 @@ setFriendCount(fc => fc * 2);
278278

279279
Проте лічильник "Очікування" не поводиться як задумано. Коли натиснути "Придбати", він зменшується до `-1` (що не повинно бути можливим!). А якщо двічі швидко клацнути, то обидва лічильники, здається, поводяться непередбачувано.
280280

281-
Чому так відбувається? Виправмо обидва лічильники.
281+
Чому так відбувається? Виправіть обидва лічильники.
282282

283283
<Sandpack>
284284

@@ -364,15 +364,15 @@ function delay(ms) {
364364

365365
</Sandpack>
366366

367-
Так можна пересвідчитись, що коли інкрементується чи декрементується лічильник, це відбувається щодо його *останнього* стану, а не того, яким стан був під час клацання.
367+
Так можна пересвідчитись, що коли інкрементується чи декрементується лічильник, це відбувається відповідно до його *останнього* стану, а не того, яким стан був під час клацання.
368368

369369
</Solution>
370370

371-
#### Самостійна реалізація черги стану {/*implement-the-state-queue-yourself*/}
371+
#### Створення власної черги стану {/*implement-the-state-queue-yourself*/}
372372

373373
У цьому завданні ви самі відтворите крихітну частину React з нуля! Це не так важко, як здається.
374374

375-
Погортайте живий зразок. Зверніть увагу на те, що він демонструє **чотири тестові випадки.** Вони відповідають прикладам, які ви бачили на цій сторінці вище. Ваше завдання — реалізувати функцію `getFinalState` так, щоб вона повертала коректний результат для кожного з цих випадків. Якщо реалізувати її коректно, то всі чотири тести пройдуть.
375+
Погортайте попередньо "пісочницю". Зверніть увагу на те, що у ній показані **чотири тестові випадки.** Вони відповідають прикладам, які ви бачили на цій сторінці вище. Ваше завдання — реалізувати функцію `getFinalState` так, щоб вона повертала коректний результат для кожного з цих випадків. Якщо реалізувати її коректно, то всі чотири тести пройдуть.
376376

377377
Ви отримаєте два аргументи: `baseState` — це початковий стан (наприклад, `0`), а `queue` — це масив, що вміщає мішанину з чисел (наприклад, `5`) і функцій-оновлювачів (наприклад, `n => n + 1`) у тому порядку, в якому вони додані.
378378

0 commit comments

Comments
 (0)