Skip to content

Commit 359a3fa

Browse files
undead404alinkedd
andauthored
Apply suggestions from code review
Co-authored-by: Alina Listunova <[email protected]>
1 parent aa9a5cf commit 359a3fa

File tree

1 file changed

+16
-16
lines changed

1 file changed

+16
-16
lines changed

src/content/learn/state-as-a-snapshot.md

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
---
2-
title: Стан як зняток
2+
title: Стан як снепшот
33
---
44

55
<Intro>
66

7-
Змінні стану можуть нагадувати звичайні змінні JavaScript, які можна зчитати та змінити. Проте стан поводиться радше як зняток. Задання йому значення не змінює наявну змінну стану, а натомість запускає повторний рендер.
7+
Змінні стану можуть нагадувати звичайні змінні JavaScript, які можна зчитати та змінити. Проте стан поводиться радше як снепшот – окремий незмінний кадр. Задання йому значення не змінює наявну змінну стану, а натомість запускає повторний рендер.
88

99
</Intro>
1010

@@ -13,7 +13,7 @@ title: Стан як зняток
1313
* Як задання стану запускає повторні рендери
1414
* Коли та як оновлюється стан
1515
* Чому стан не оновлюється відразу після задання значення
16-
* Як обробники подій звертаються до "знятку" стану
16+
* Як обробники подій звертаються до "снепшоту" стану
1717

1818
</YouWillLearn>
1919

@@ -69,30 +69,30 @@ label, textarea { margin-bottom: 10px; display: block; }
6969

7070
Погляньмо уважніше на взаємозв'язок між станом і рендерингом.
7171

72-
## Рендеринг бере один зняток за раз {/*rendering-takes-a-snapshot-in-time*/}
72+
## Кожен рендер отримує новий снепшот {/*rendering-takes-a-snapshot-in-time*/}
7373

74-
["Рендеринг"](/learn/render-and-commit#step-2-react-renders-your-components) означає, що React викликає ваш компонент, який є функцією. JSX, який ви повертаєте з цієї функції, — це як зняток UI в певну мить часу. Його пропси, обробники подій і локальні змінні обчислюються **з використанням його стану в мить рендеру.**
74+
["Рендеринг"](/learn/render-and-commit#step-2-react-renders-your-components) означає, що React викликає ваш компонент, який є функцією. JSX, який ви повертаєте з цієї функції, — це як кадр UI в певну мить часу. Його пропси, обробники подій і локальні змінні обчислюються **з використанням його стану в мить рендеру.**
7575

76-
На відміну від світлини чи кадру кінострічки, "зняток" UI, який ви повертаєте, є інтерактивним. Він вміщає логіку штибу обробників подій, які задають, що відбувається внаслідок введення з боку користувача. React оновлює екран до відповідності цьому знятку, й приєднує обробники подій. Як наслідок, натискання кнопки запускає обробник клацання, заданий у вашому JSX.
76+
На відміну від світлини чи кадру кінострічки повернений "снепшот" UI інтерактивний. Він вміщає логіку штибу обробників подій, які визначають дії внаслідок введення користувачем. React оновлює екран до відповідності цьому снепшоту й приєднує обробники подій. Як наслідок, натискання кнопки запускає обробник клацання, заданий у вашому JSX.
7777

7878
Коли React виконує повторний рендер компонента, відбувається наступне:
7979

8080
1. React знову викликає вашу функцію.
81-
2. Ваша функція повертає новий зняток JSX.
82-
3. React потім оновлює екран до відповідності знятку, поверненого вашою функцією.
81+
2. Ваша функція повертає новий снепшот JSX.
82+
3. React потім оновлює екран до відповідності снепшоту, поверненого вашою функцією.
8383

8484
<IllustrationBlock sequential>
8585
<Illustration caption="React виконує функцію" src="/images/docs/illustrations/i_render1.png" />
86-
<Illustration caption="Обчислюється зняток" src="/images/docs/illustrations/i_render2.png" />
86+
<Illustration caption="Обчислюється снепшот" src="/images/docs/illustrations/i_render2.png" />
8787
<Illustration caption="Оновлюється дерево DOM" src="/images/docs/illustrations/i_render3.png" />
8888
</IllustrationBlock>
8989

90-
Стан, пам'ять компонента, не схожий на звичайну змінну, що зникає, коли відбувається повернення з функції. Стан фактично "живе" в самому React — неначе на поличці! — поза вашою функцією. Коли React викликає ваш компонент, він надає вам зняток стану для конкретного поточного рендеру. Ваш компонент повертає зняток UI зі свіжим набором пропсів і обробників подій у своєму JSX, що обчислюється **з використанням значень стану, взятих з цього рендеру!**
90+
Стан, пам'ять компонента, не схожий на звичайну змінну, що зникає, коли відбувається повернення з функції. Стан фактично "живе" в самому React — неначе на поличці! — поза вашою функцією. Коли React викликає ваш компонент, він надає вам снепшот стану для конкретного поточного рендеру. Ваш компонент повертає снепшот UI зі свіжим набором пропсів і обробників подій у своєму JSX, обчисленим **із використанням значень стану, взятих із цього рендеру!**
9191

9292
<IllustrationBlock sequential>
9393
<Illustration caption="Ви кажете React оновити стан" src="/images/docs/illustrations/i_state-snapshot1.png" />
9494
<Illustration caption="React оновлює значення стану" src="/images/docs/illustrations/i_state-snapshot2.png" />
95-
<Illustration caption="React передає зняток значення стану до компонента" src="/images/docs/illustrations/i_state-snapshot3.png" />
95+
<Illustration caption="React передає снепшот значення стану до компонента" src="/images/docs/illustrations/i_state-snapshot3.png" />
9696
</IllustrationBlock>
9797

9898
Ось невеликий експеримент для демонстрації того, як це працює. У цьому прикладі можна очікувати, що клацання кнопки "+3" збільшить лічильник тричі, тому що це викликає `setNumber(number + 1)` тричі.
@@ -241,7 +241,7 @@ h1 { display: inline-block; margin: 10px; width: 30px; text-align: center; }
241241

242242
</Sandpack>
243243

244-
Здивовані? Якщо скористалися методом заміни, то бачите, який "зняток" стану був переданий до повідомлення.
244+
Здивовані? Якщо скористалися методом заміни, то бачите, який саме "снепшот" стану був переданий до повідомлення.
245245

246246
```js
247247
setNumber(0 + 5);
@@ -250,9 +250,9 @@ setTimeout(() => {
250250
}, 3000);
251251
```
252252

253-
Стан, що зберігається в React, може змінитися на час виведення повідомлення, але він був запланований з використанням знятку стану, актуального тоді, коли користувач повзаємодіяв з елементом!
253+
Стан, що зберігається в React, може змінитися на час виведення повідомлення, але він був запланований з використанням снепшоту стану, актуального в момент взаємодії користувача з елементом!
254254

255-
**Значення змінної стану ніколи не змінюється протягом одного рендеру,** навіть якщо код обробника події є асинхронним. Всередині `onClick` *поточного рендеру* значення `number` усе одно залишається `0`, навіть після виклику `setNumber(number + 5)`. Її значення "зафіксувалося", коли React "зробив зняток" UI, викликавши ваш компонент.
255+
**Значення змінної стану ніколи не змінюється протягом одного рендеру,** навіть якщо код обробника події є асинхронним. Всередині `onClick` *поточного рендеру* значення `number` усе одно залишається `0` навіть після виклику `setNumber(number + 5)`. Її значення "зафіксувалося", коли React "зробив снепшот" UI, викликавши ваш компонент.
256256

257257
Ось приклад, як це захищає обробники подій від помилок хронометражу. Нижче — форма, що надсилає повідомлення з п'ятисекундною затримкою. Уявіть такий сценарій:
258258

@@ -313,9 +313,9 @@ label, textarea { margin-bottom: 10px; display: block; }
313313

314314
* Задання стану спричиняє прохання про новий рендер.
315315
* React зберігає стан поза вашим компонентом, неначе на поличці.
316-
* Коли викликається `useState`, React видає зняток стану *для конкретного поточного рендеру*.
316+
* Коли викликається `useState`, React віддає снепшот стану *для конкретного поточного рендеру*.
317317
* Змінні та обробники подій не "переживають" повторні рендери. Кожний рендер має власні обробники подій.
318-
* Кожний рендер (а також функції в ньому) завжди "бачить" зняток стану, який React видав *цьому конкретному* рендеру.
318+
* Кожний рендер (а також функції в ньому) завжди "бачить" снепшот стану, який React віддав *цьому конкретному* рендеру.
319319
* Можна уявно підставити стан в обробниках подій — подібного до того, як ми уявляємо JSX після рендеру.
320320
* Обробники подій, створені в минулому, мають значення стану з тих рендерів, у яких вони створені.
321321

0 commit comments

Comments
 (0)