跳到主要内容

自动冻结

egghead.io 第7课: Immer 自动冻结数据

Immer 自动冻结所有使用 produce 修改的任何 state。这可以防止在 producer 之外意外修改 state。在大多数情况下,这是最佳实践,但你可以通过 setAutoFreeze(true / false) 显式打开或关闭此功能。

Immer 永远不会冻结不可枚举、非自己或符号属性的(内容),除非它们的内容是可以被 draft 的。

⚠️ Immer 以递归方式冻结所有内容,对于将来不会更改的大型数据对象,这可能会矫枉过正,在这种情况下,使用 freeze 函数 浅层冻结数据会更有效。⚠️

⚠️ 如果启用了自动冻结,recipe 函数并非完全没有副作用:任何最终出现在 produce 结果中的普通对象或数组都将被冻结,即使这些对象在 producer 开始之前没有被冻结!⚠️