在 mobx 中对数组使用可变操作是否可取?
Is it advisable to use mutable operations for array in mobx?
每次react
我都关心immutable array operations
避免通过 mutable operations
意外更改状态
我经常用immutable operations
每当我需要添加新项目时,我都会使用这个
[...myArr, 'newItem'];
而不是可变操作
myArr.push('newItem');
但是,我在official doc上看到了一个mobx
的例子,我很惊讶,因为他们使用了push()
方法。
我是mobx
初学者,不敢用mutable operation
,
有人知道吗?
我做错了吗?或者我可以在 mobx
上进行 mutable
操作并做出反应吗?
扩展运算符...创建一个新数组,需要分配一些内存。所以,与 push
相比,它有点昂贵
let arr = [1, 2, 3];
let arr2 = [...arr]; // like arr.slice()
arr2.push(4);
// arr2 becomes [1, 2, 3, 4]
// arr remains unaffected
阅读更多here
这个操作有不同的语义和结果,一切都取决于你的目标是什么。
是否需要通知所有可观察对象该数组已更改?然后创建新数组,就像 [...myArr, 'newItem'];
或您喜欢的任何其他方式。
您只需要向数组中添加一个项目吗?使用 push
例如,在第一种情况下,每个具有该数组 dep 的 useEffect
都会做出反应,但当您 push
:
时,在第二种情况下不会有任何效果
useEffect(() => {
// ...
}, [myArray])
每次react
我都关心immutable array operations
避免通过 mutable operations
我经常用immutable operations
每当我需要添加新项目时,我都会使用这个
[...myArr, 'newItem'];
而不是可变操作
myArr.push('newItem');
但是,我在official doc上看到了一个mobx
的例子,我很惊讶,因为他们使用了push()
方法。
我是mobx
初学者,不敢用mutable operation
,
有人知道吗?
我做错了吗?或者我可以在 mobx
上进行 mutable
操作并做出反应吗?
扩展运算符...创建一个新数组,需要分配一些内存。所以,与 push
let arr = [1, 2, 3];
let arr2 = [...arr]; // like arr.slice()
arr2.push(4);
// arr2 becomes [1, 2, 3, 4]
// arr remains unaffected
阅读更多here
这个操作有不同的语义和结果,一切都取决于你的目标是什么。
是否需要通知所有可观察对象该数组已更改?然后创建新数组,就像 [...myArr, 'newItem'];
或您喜欢的任何其他方式。
您只需要向数组中添加一个项目吗?使用 push
例如,在第一种情况下,每个具有该数组 dep 的 useEffect
都会做出反应,但当您 push
:
useEffect(() => {
// ...
}, [myArray])