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/updating-objects-in-state.md
+13-13Lines changed: 13 additions & 13 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -10,9 +10,9 @@ title: Обновление объектов в состоянии
10
10
11
11
<YouWillLearn>
12
12
13
-
- Как правильно в React обновлять объект в состоянии;
14
-
- Как обновить вложенный объект без мутации;
15
-
- Что такое иммутабельность, как её не нарушить;
13
+
- Как правильно в React обновлять объект в состоянии
14
+
- Как обновить вложенный объект без мутации
15
+
- Что такое иммутабельность, как её не нарушить
16
16
- Как сделать копирование объектов менее повторяющимся и сложным с Immer
17
17
18
18
</YouWillLearn>
@@ -199,7 +199,7 @@ setPosition({
199
199
200
200
</DeepDive>
201
201
202
-
## Копирование объектов с использованием спредсинтаксиса {/*copying-objects-with-the-spread-syntax*/}
202
+
## Копирование объектов с использованием спред-синтаксиса {/*copying-objects-with-the-spread-syntax*/}
203
203
204
204
В предыдущем примере, объект `position` всегда создаётся заново, исходя из текущей позиции курсора. На практике чаще всего вы захотите включать уже *существующие* данные в новый объект, который вы создаёте. Например, вы можете захотеть обновить *только одно* поле в форме, остальные значения полей сохранить без изменений.
205
205
@@ -285,7 +285,7 @@ setPerson({
285
285
});
286
286
```
287
287
288
-
Вы можете использовать `...` [спредоператор,](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax#spread_in_object_literals) чтобы вам не нужно было копировать каждое свойство отдельно.
288
+
Вы можете использовать `...` [спред-оператор,](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax#spread_in_object_literals) чтобы вам не нужно было копировать каждое свойство отдельно.
Помните, что `...` спредсинтаксис является "поверхностным"-- он копирует элементы только на один уровень вглубь. Это свойство делает его быстрым, но это также означает, что если вы хотите обновить вложенное свойство, вам придётся использовать его более одного раза.
374
+
Помните, что `...` спред-синтаксис является "поверхностным"-- он копирует элементы только на один уровень вглубь. Это свойство делает его быстрым, но это также означает, что если вы хотите обновить вложенное свойство, вам придётся использовать его более одного раза.
375
375
376
376
<DeepDive>
377
377
@@ -672,7 +672,7 @@ updatePerson(draft => {
672
672
673
673
Попробуйте Immer:
674
674
675
-
1. Запустите в терминале `npm install use-immer`, чтобы добавить Immer как зависимость;
675
+
1. Запустите в терминале `npm install use-immer`, чтобы добавить Immer как зависимость
676
676
2. Далее замените `import { useState } from 'react'` на `import { useImmer } from 'use-immer'`
Проблема заключалась в мутации внутри `handleMove`. Он изменил `shape.position`, но это тот же объект, на который указывает `initialPosition`. Вот почему блок и фон двигаются. (Это мутация, поэтому изменение не отражается на экране до тех пор, пока несвязанное обновление -- изменение цвета -- не вызовет повторный рендер)
1134
1134
1135
-
Необходимо удалить мутацию из `handleMove` и использовать спредсинтаксис для копирования формы. Обратите внимание, что `+=`-- мутация, вам нужно переписать её, чтобы использовать обычную операцию `+`
1135
+
Необходимо удалить мутацию из `handleMove` и использовать спред-синтаксис для копирования формы. Обратите внимание, что `+=`-- мутация, вам нужно переписать её, чтобы использовать обычную операцию `+`
0 commit comments