# 自动冻结

URL: https://caijiao.org/immer/guide/freezing
Source: docs/immer/guide/freezing.md
Description: 了解 Immer 的自动冻结功能，以及如何控制和使用它。

Immer 自动冻结所有使用 `produce` 修改的任何 state。这可以防止在 producer 之外意外修改 state。在大多数情况下，这是最佳实践，但你可以通过 `setAutoFreeze(true / false)` 显式打开或关闭此功能。

Immer 永远不会冻结不可枚举、非自己或符号属性的（内容），除非它们的内容是可以被 `draft` 的。

_⚠️ Immer 以递归方式冻结所有内容，对于将来不会更改的大型数据对象，这可能会矫枉过正，在这种情况下，使用 `freeze` 函数 浅层冻结数据会更有效。⚠️_

_⚠️ 如果启用了自动冻结，recipe 函数并非完全没有副作用：任何最终出现在 produce 结果中的普通对象或数组都将被冻结，即使这些对象在 producer 开始之前没有被冻结！⚠️_
