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
## Рендеринг бере один зняток за раз {/*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
76
На відміну від світлини чи кадру кінострічки, "зняток" UI, який ви повертаєте, є інтерактивним. Він вміщає логіку штибу обробників подій, які задають, що відбувається внаслідок введення з боку користувача. React оновлює екран до відповідності цьому знятку, й приєднує обробники подій. Як наслідок, натискання кнопки запускає обробник клацання, заданий у вашому JSX.
Стан, пам'ять компонента, не схожий на звичайну змінну, що зникає, коли відбувається повернення з функції. Стан фактично "живе" в самому React – неначе на поличці! – поза вашою функцією. Коли React викликає ваш компонент, він надає вам зняток стану для конкретного поточного рендеру. Ваш компонент повертає зняток UI зі свіжим набором пропсів і обробників подій у своєму JSX, що обчислюється **з використанням значень стану, взятих з цього рендеру!**
90
+
Стан, пам'ять компонента, не схожий на звичайну змінну, що зникає, коли відбувається повернення з функції. Стан фактично "живе" в самому React — неначе на поличці! — поза вашою функцією. Коли React викликає ваш компонент, він надає вам зняток стану для конкретного поточного рендеру. Ваш компонент повертає зняток UI зі свіжим набором пропсів і обробників подій у своєму JSX, що обчислюється **з використанням значень стану, взятих з цього рендеру!**
Ось що обробник клацання цієї кнопки каже React робити:
143
143
144
-
1.`setNumber(number + 1)`: `number`–`0`, тож `setNumber(0 + 1)`.
144
+
1.`setNumber(number + 1)`: `number`—`0`, тож `setNumber(0 + 1)`.
145
145
* React готується змінити `number` на `1` в наступному рендері.
146
-
2.`setNumber(number + 1)`: `number`–`0`, тож `setNumber(0 + 1)`.
146
+
2.`setNumber(number + 1)`: `number`—`0`, тож `setNumber(0 + 1)`.
147
147
* React готується змінити `number` на `1` в наступному рендері.
148
-
3.`setNumber(number + 1)`: `number`–`0`, тож `setNumber(0 + 1)`.
148
+
3.`setNumber(number + 1)`: `number`—`0`, тож `setNumber(0 + 1)`.
149
149
* React готується змінити `number` на `1` в наступному рендері.
150
150
151
151
Навіть попри те, що ви викликали `setNumber(number + 1)` тричі, в обробнику подій *поточного рендеру*`number` завжди дорівнює `0`, тож ви задаєте стан `1` тричі. Саме тому, коли завершується виконання вашого обробника помилок, React виконує повторний рендер компонента, де `number` дорівнює `1`, а не `3`.
Саме тому клацання кнопки знову задасть лічильнику значення `2`, потім `3`– при наступному клацанні, і так далі.
173
+
Саме тому клацання кнопки знову задасть лічильнику значення `2`, потім `3`— при наступному клацанні, і так далі.
174
174
175
175
## Стан протягом часу {/*state-over-time*/}
176
176
@@ -254,7 +254,7 @@ setTimeout(() => {
254
254
255
255
**Значення змінної стану ніколи не змінюється протягом одного рендеру,** навіть якщо код обробника події є асинхронним. Всередині `onClick`*поточного рендеру* значення `number` усе одно залишається `0`, навіть після виклику `setNumber(number + 5)`. Її значення "зафіксувалося", коли React "зробив зняток" UI, викликавши ваш компонент.
256
256
257
-
Ось приклад того, що робить обробники помилок більш захищеними щодо помилок хронометражу. Нижче – форма, що надсилає повідомлення з п'ятисекундною затримкою. Уявіть такий сценарій:
257
+
Ось приклад того, що робить обробники помилок більш захищеними щодо помилок хронометражу. Нижче — форма, що надсилає повідомлення з п'ятисекундною затримкою. Уявіть такий сценарій:
258
258
259
259
1. Ви натискаєте кнопку "Надіслати", надсилаючи "Привіт" Анні.
260
260
2. Перш ніж закінчиться п'ятисекундна затримка, ви змінюєте значення в полі "Кому" на "Богдан".
@@ -404,7 +404,7 @@ h1 { margin-top: 20px; }
404
404
405
405
</Sandpack>
406
406
407
-
Незалежно від того, чи ви поставите виклик `alert` до виклику `setWalk`, чи після, це дасть один і той же результат. Значення `walk` у рендері – зафіксовано. Виклик `setWalk` змінить його лише для *наступного* рендеру, але не вплине на обробник подій з попереднього.
407
+
Незалежно від того, чи ви поставите виклик `alert` до виклику `setWalk`, чи після, це дасть один і той же результат. Значення `walk` у рендері — зафіксовано. Виклик `setWalk` змінить його лише для *наступного* рендеру, але не вплине на обробник подій з попереднього.
0 commit comments