在 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])