从 draft 中提取原始 state
Immer中暴露了一个命名对象 original
,将从 produce
内部的代理实例获取原始对象(对于未代理值返回 undefined
。
一个好的例子是:当在一个树状 state 中使用严格相等搜索结点的时候它很有用。
import {original, produce} from "immer"
const baseState = {users: [{name: "Richie"}]}
const nextState = produce(baseState, draftState => {
original(draftState.users) // is === baseState.users
})
只是想知道一个值是否是代理实例?使用 isDraft
函数!请注意,不能在不是 draft 的对象上调用 original
。
import {isDraft, produce} from "immer"
const baseState = {users: [{name: "Bobby"}]}
const nextState = produce(baseState, draft => {
isDraft(draft) // => true
isDraft(draft.users) // => true
isDraft(draft.users[0]) // => true
})
isDraft(nextState) // => false