JS 里面的变量类型可以分为 基本类型 和 引用类型 。
在使用过程中,引用类型经常会产生一些无法意识到的副作用,所以在现代 JS 开发过程中,有经验的开发者都会在特定位置有意识的写下断开引用的不可变数据类型。
import produce from 'immer';
const data = { done: false, val: 'string', }
const newData = produce(data, (draft) => {
draft.done = true
})
console.log(newData === data)
通过上面的例子我们能发现,所有具有副作用的逻辑都可以放进 produce 的第二个参数的函数内部进行处理。在这个函数内部对原来的数据进行任何操作,都不会对原对象产生任何影响。
这里我们可以在函数中进行任何操作,例如 push splice 等非 immutable 的 API,最终结果与原来的数据互不影响。