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: src/content/learn/state-as-a-snapshot.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
@@ -1,10 +1,10 @@
1
1
---
2
-
title: Стан як зняток
2
+
title: Стан як снепшот
3
3
---
4
4
5
5
<Intro>
6
6
7
-
Змінні стану можуть нагадувати звичайні змінні JavaScript, які можна зчитати та змінити. Проте стан поводиться радше як зняток. Задання йому значення не змінює наявну змінну стану, а натомість запускає повторний рендер.
7
+
Змінні стану можуть нагадувати звичайні змінні JavaScript, які можна зчитати та змінити. Проте стан поводиться радше як снепшот – окремий незмінний кадр. Задання йому значення не змінює наявну змінну стану, а натомість запускає повторний рендер.
8
8
9
9
</Intro>
10
10
@@ -13,7 +13,7 @@ title: Стан як зняток
13
13
* Як задання стану запускає повторні рендери
14
14
* Коли та як оновлюється стан
15
15
* Чому стан не оновлюється відразу після задання значення
16
-
* Як обробники подій звертаються до "знятку" стану
16
+
* Як обробники подій звертаються до "снепшоту" стану
Погляньмо уважніше на взаємозв'язок між станом і рендерингом.
71
71
72
-
## Рендеринг бере один зняток за раз {/*rendering-takes-a-snapshot-in-time*/}
72
+
## Кожен рендер отримує новий снепшот {/*rendering-takes-a-snapshot-in-time*/}
73
73
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 в певну мить часу. Його пропси, обробники подій і локальні змінні обчислюються **з використанням його стану в мить рендеру.**
75
75
76
-
На відміну від світлини чи кадру кінострічки, "зняток" UI, який ви повертаєте, є інтерактивним. Він вміщає логіку штибу обробників подій, які задають, що відбувається внаслідок введення з боку користувача. React оновлює екран до відповідності цьому знятку, й приєднує обробники подій. Як наслідок, натискання кнопки запускає обробник клацання, заданий у вашому JSX.
76
+
На відміну від світлини чи кадру кінострічки повернений "снепшот" UI інтерактивний. Він вміщає логіку штибу обробників подій, які визначають дії внаслідок введення користувачем. React оновлює екран до відповідності цьому снепшоту й приєднує обробники подій. Як наслідок, натискання кнопки запускає обробник клацання, заданий у вашому JSX.
77
77
78
78
Коли React виконує повторний рендер компонента, відбувається наступне:
79
79
80
80
1. React знову викликає вашу функцію.
81
-
2. Ваша функція повертає новий зняток JSX.
82
-
3. React потім оновлює екран до відповідності знятку, поверненого вашою функцією.
81
+
2. Ваша функція повертає новий снепшот JSX.
82
+
3. React потім оновлює екран до відповідності снепшоту, поверненого вашою функцією.
83
83
84
84
<IllustrationBlocksequential>
85
85
<Illustration caption="React виконує функцію" src="/images/docs/illustrations/i_render1.png" />
Стан, пам'ять компонента, не схожий на звичайну змінну, що зникає, коли відбувається повернення з функції. Стан фактично "живе" в самому React — неначе на поличці! — поза вашою функцією. Коли React викликає ваш компонент, він надає вам зняток стану для конкретного поточного рендеру. Ваш компонент повертає зняток UI зі свіжим набором пропсів і обробників подій у своєму JSX, що обчислюється **з використанням значень стану, взятих з цього рендеру!**
90
+
Стан, пам'ять компонента, не схожий на звичайну змінну, що зникає, коли відбувається повернення з функції. Стан фактично "живе" в самому React — неначе на поличці! — поза вашою функцією. Коли React викликає ваш компонент, він надає вам снепшот стану для конкретного поточного рендеру. Ваш компонент повертає снепшот UI зі свіжим набором пропсів і обробників подій у своєму JSX, обчисленим **із використанням значень стану, взятих із цього рендеру!**
<Illustrationcaption="React оновлює значення стану"src="/images/docs/illustrations/i_state-snapshot2.png" />
95
-
<Illustrationcaption="React передає зняток значення стану до компонента"src="/images/docs/illustrations/i_state-snapshot3.png" />
95
+
<Illustrationcaption="React передає снепшот значення стану до компонента"src="/images/docs/illustrations/i_state-snapshot3.png" />
96
96
</IllustrationBlock>
97
97
98
98
Ось невеликий експеримент для демонстрації того, як це працює. У цьому прикладі можна очікувати, що клацання кнопки "+3" збільшить лічильник тричі, тому що це викликає `setNumber(number + 1)` тричі.
Здивовані? Якщо скористалися методом заміни, то бачите, який "зняток" стану був переданий до повідомлення.
244
+
Здивовані? Якщо скористалися методом заміни, то бачите, який саме "снепшот" стану був переданий до повідомлення.
245
245
246
246
```js
247
247
setNumber(0+5);
@@ -250,9 +250,9 @@ setTimeout(() => {
250
250
}, 3000);
251
251
```
252
252
253
-
Стан, що зберігається в React, може змінитися на час виведення повідомлення, але він був запланований з використанням знятку стану, актуального тоді, коли користувач повзаємодіяв з елементом!
253
+
Стан, що зберігається в React, може змінитися на час виведення повідомлення, але він був запланований з використанням снепшоту стану, актуального в момент взаємодії користувача з елементом!
254
254
255
-
**Значення змінної стану ніколи не змінюється протягом одного рендеру,** навіть якщо код обробника події є асинхронним. Всередині `onClick`*поточного рендеру* значення `number` усе одно залишається `0`, навіть після виклику `setNumber(number + 5)`. Її значення "зафіксувалося", коли React "зробив зняток" UI, викликавши ваш компонент.
255
+
**Значення змінної стану ніколи не змінюється протягом одного рендеру,** навіть якщо код обробника події є асинхронним. Всередині `onClick`*поточного рендеру* значення `number` усе одно залишається `0` навіть після виклику `setNumber(number + 5)`. Її значення "зафіксувалося", коли React "зробив снепшот" UI, викликавши ваш компонент.
256
256
257
257
Ось приклад, як це захищає обробники подій від помилок хронометражу. Нижче — форма, що надсилає повідомлення з п'ятисекундною затримкою. Уявіть такий сценарій:
0 commit comments