教程 immer tutorial

API 概览

导出名称 描述 章节
(default) Immer 核心 API,通常命名为 produce: import {produce} from "immer" Produce
applyPatches 给定一个基本 state 或 draft,以及一组 patches ,应用 patches Patches
castDraft 将任何不可变类型转换为其可变对应物。这只是一个转换,实际上并没有做任何事情。 TypeScript
castImmutable 将任何可变类型转换为其不可变对应物。这只是一个转换,实际上并没有做任何事情。 TypeScript
createDraft 给定一个基本 state,创建一个可变 draft,任何修改都将被记录下来 createDraft / finishDraft
current 给定一个 draft 对象(不必是对象的根结点),对 draft 的当前状态进行快照 Current
Draft<T> 暴露的 TypeScript 类型以将不可变类型转换为可变类型 TypeScript
enableMapSet() 启用对 Map 和 Set 集合的支持。 Installation
enablePatches() 启用对 JSON patches 的支持 Installation
finishDraft 完成一个 draft,并返回最终的不可变 state createDraft / finishDraft
freeze 冻结一个对象,使其不可变。在开发模式下,Immer 会自动冻结返回的 state。 Freezing
Immutable<T> 暴露的 TypeScript 类型以将可变类型转换为不可变类型 TypeScript
nothing 特殊标记,用于从 producer 中返回 undefined 从 producers 返回新数据
original 给定一个 draft 对象,返回其原始状态(如果有) Original
produceWithPatches 类似于 produce,但同时返回 patches Patches
setAutoFreeze 启用或禁用自动冻结返回的 state Freezing
setUseProxies 启用或禁用使用 Proxies(在不支持 Proxies 的环境中) Installation

导入 immer

produce 作为默认导出,但也可以选择将其用作名称导入,因为这有利于一些较旧的项目设置。所以下面的导入都是正确的,这里推荐第一个:

javascript
import {produce} from "immer"
import {produce} from "immer"

const {produce} = require("immer")
const produce = require("immer").produce
const produce = require("immer").default

import unleashTheMagic from "immer"
import {produce as unleashTheMagic} from "immer"