简介
Immer 是 mobx 的作者写的一个 immutable 库,核心实现是利用 ES6 的 proxy,几乎以最小的成本实现了 js 的不可变数据结构,简单易用、体量小巧、设计巧妙,满足了我们对JS不可变数据结构的需求。
解决的问题
假设有这样一个对象
let myData = {
b: {
c: [2],
},
}
当我们执行下面的操作时:
let a1 = myData;
o1.p = 1; // myData 被修改了
o1.p.x = 1; // myData 被修改了
即使使用了展开运算符:
let a3 = {
...myData
};
a3.p.x = 1; // myData 被修改了
使用immer
import produce from 'immer';
let a4 = produce(myData, draft => {
draft.p.x = 1;
})
为什么不用深浅拷贝
深度拷贝,但是深拷贝的成本较高,会影响性能;