Mutative

markSimpleObject()

允许无原型对象和跨 realm 普通对象创建草稿的标记。

markSimpleObject 是一个标记,支持普通对象、由 Object.create(null) 创建的无原型对象,以及同源 iframe 或 vm 上下文等其他 realm 中的普通对象(其原型为对应 realm 的 Object.prototype)。未使用它时,Mutative 只为当前 realm 的普通对象创建草稿,对其他类型的基础状态调用 create() 会抛错。

markSimpleObject(value: unknown): 'immutable' | undefined

用法

将它作为单次调用或 makeCreator() 的 mark 选项:

import { create, markSimpleObject } from 'mutative';

const baseState = {
  foo: {
    bar: 'str',
  },
  simpleObject: Object.create(null),
};

const state = create(
  baseState,
  (draft) => {
    draft.foo.bar = 'new str';
    draft.simpleObject.a = 'a';
  },
  {
    mark: markSimpleObject,
  }
);

expect(state.simpleObject).not.toBe(baseState.simpleObject);
expect(state.simpleObject.a).toBe('a');
expect(Object.getPrototypeOf(state.simpleObject)).toBe(null);
expect(baseState.simpleObject.a).toBe(undefined);

它对简单对象返回 'immutable',其他值不返回结果,交由默认方式处理。因此可用数组与其他标记组合,如 mark: [markSimpleObject, markClasses]。它与其他不可变标记一样支持补丁和自动冻结。

在 GitHub 上编辑

最后更新于 作者:unadlib

本页内容