File tree Expand file tree Collapse file tree 1 file changed +3
-3
lines changed Expand file tree Collapse file tree 1 file changed +3
-3
lines changed Original file line number Diff line number Diff line change @@ -448,7 +448,7 @@ export default function List() {
448448
449449在这段代码中,你先使用 ` [...list] ` 展开运算符创建了一份数组的拷贝值。当你有了这个拷贝值后,你就可以使用像 ` nextList.reverse() ` 或 ` nextList.sort() ` 这样直接修改原数组的方法。你甚至可以通过 ` nextList[0] = "something" ` 这样的方式对数组中的特定元素进行赋值。
450450
451- 然而,** 即使你拷贝了数组,你还是不能直接修改其_内部_的元素 ** 。这是因为数组的拷贝是浅拷贝——新的数组中依然保留了与原始数组相同的元素。因此,如果你修改了拷贝数组内部的某个对象,其实你正在直接修改当前的 state。举个例子,像下面的代码就会带来问题。
451+ 然而,** 即使你拷贝了数组,你还是不能直接修改其内部的元素 ** 。这是因为数组的拷贝是浅拷贝——新的数组中依然保留了与原始数组相同的元素。因此,如果你修改了拷贝数组内部的某个对象,其实你正在直接修改当前的 state。举个例子,像下面的代码就会带来问题。
452452
453453``` js
454454const nextList = [... list];
@@ -460,7 +460,7 @@ setList(nextList);
460460
461461## 更新数组内部的对象 {/* updating-objects-inside-arrays* /}
462462
463- 对象并不是_真的_位于数组 “内部”。可能他们在代码中看起来像是在数组“内部”,但其实数组中的每个对象都是这个数组“指向”的一个存储于其它位置的值。这就是当你在处理类似 ` list[0] ` 这样的嵌套字段时需要格外小心的原因。其他人的艺术品清单可能指向了数组的同一个元素!
463+ 对象并不是 _ 真的 _ 位于数组 “内部”。可能他们在代码中看起来像是在数组“内部”,但其实数组中的每个对象都是这个数组“指向”的一个存储于其它位置的值。这就是当你在处理类似 ` list[0] ` 这样的嵌套字段时需要格外小心的原因。其他人的艺术品清单可能指向了数组的同一个元素!
464464
465465** 当你更新一个嵌套的 state 时,你需要从想要更新的地方创建拷贝值,一直这样,直到顶层。** 让我们看一下这该怎么做。
466466
@@ -776,7 +776,7 @@ updateMyTodos(draft => {
776776});
777777```
778778
779- 这是因为你并不是在直接修改_原始的 _ state,而是在修改 Immer 提供的一个特殊的 ` draft ` 对象。同理,你也可以为 ` draft ` 的内容使用 ` push() ` 和 ` pop() ` 这些会直接修改原值的方法。
779+ 这是因为你并不是在直接修改原始的 state,而是在修改 Immer 提供的一个特殊的 ` draft ` 对象。同理,你也可以为 ` draft ` 的内容使用 ` push() ` 和 ` pop() ` 这些会直接修改原值的方法。
780780
781781在幕后,Immer 总是会根据你对 ` draft ` 的修改来从头开始构建下一个 state。这使得你的事件处理程序非常的简洁,同时也不会直接修改 state。
782782
You can’t perform that action at this time.
0 commit comments