Function
Static Public Summary | ||
public |
createDiffNode(changeType: string, oldValue: *, newValue: *): Object 创建一个差异节点 |
|
public |
针对 |
|
public |
针对 |
|
public |
isDiffNode(node: *): boolean 判断一个对象是否为差异节点 |
|
public |
针对 |
|
public |
合并差异对象 |
|
public |
mergeDiffNode(x: Object, y: Object): Object 合并2个差异节点 |
|
public |
针对 |
|
public |
针对 |
|
public |
针对 |
|
public |
效果等同于 |
|
public |
根据提供的指令更新一个对象,返回更新后的新对象以及新旧对象的差异(diff),原对象不会作任何的修改 |
Static Public
public createDiffNode(changeType: string, oldValue: *, newValue: *): Object source
import {createDiffNode} from 'diffy-update/src/diffNode.js'
创建一个差异节点
通常此函数由withDiff
或mergeDiff
等函数调用得到差异节点,大部分场景下开发者并不需要自行创建差异节点
本函数依赖外部参数正确,并不会对参数间的关系进行检测,需要在调用时保证如changeType
为"add"
时,oldValue
为undefined
等约束
Params:
Name | Type | Attribute | Description |
changeType | string | 变化的各类,可以为 |
|
oldValue | * | 原值 |
|
newValue | * | 新值 |
public defaults(source: Object, path: string? | Array<string>, value: *): Object source
import {defaults} from 'diffy-update'
针对$defaults
指令的快捷函数
public invoke(source: Object, path: string? | Array<string>, factory: Function): Object source
import {invoke} from 'diffy-update'
针对$invoke
指令的快捷函数
public isDiffNode(node: *): boolean source
import {isDiffNode} from 'diffy-update/src/diffNode.js'
判断一个对象是否为差异节点
如果一个对象为差异节点,那么它有且仅有以下属性:
changeType
表示修改的类型,值为"add"
、"remove"
或者"change"
oldValue
表示修改前的值,如果changeType
为"add"
则值恒定为undefined
newValue
表示修改后的值,如果changeType
为"remove"
则值恒定为undefined
Params:
Name | Type | Attribute | Description |
node | * | 用于判断的节点 |
public merge(source: Object, path: string? | Array<string>, value: *): Object source
import {merge} from 'diffy-update'
针对$merge
指令的快捷函数
public mergeDiff(stored: Object, merging: Object, oldValue: *, newValue: *): Object source
import {mergeDiff} from 'diffy-update/src/merge.js'
合并差异对象
这个函数用来将多次更新的差异对象合并,但需要最初的与最后更新后的对象值
public mergeDiffNode(x: Object, y: Object): Object source
import {mergeDiffNode} from 'diffy-update/src/merge.js'
合并2个差异节点
public push(source: Object, path: string? | Array<string>, value: *): Object source
import {push} from 'diffy-update'
针对$push
指令的快捷函数
public set(source: Object, path: string? | Array<string>, value: *): Object source
import {set} from 'diffy-update'
针对$set
指令的快捷函数
public unshift(source: Object, path: string? | Array<string>, value: *): Object source
import {unshift} from 'diffy-update'
针对$unshift
指令的快捷函数
public update(source: Object, commands: Object): Object source
import update from 'diffy-update'
效果等同于withDiff
函数,但不返回差异对象
public withDiff(source: Object, commands: Object): Array source
import {withDiff} from 'diffy-update'
根据提供的指令更新一个对象,返回更新后的新对象以及新旧对象的差异(diff),原对象不会作任何的修改
现有支持的指令包括:
$set
:修改指定的属性值$push
:向类型为数组的属性尾部添加元素$unshift
:向类型为数组的属性头部添加元素$merge
:将2个对象进行浅合并(不递归)$defaults
:将指定对象的属性值填到原属性为undefined
的属性上$invoke
:用一个工厂函数的返回值作为$set
指令的输入,工厂函数接受属性的旧值作为唯一的参数
可以在一次更新操作中对不同的属性用不同的指令:
import {withDiff} from 'diffy-update';
let [newObject, diff] = withDiff(
source,
{
foo: {bar: {$set: 1}},
alice: {$push: 1},
tom: {jack: {$set: {x: 1}}
}
);
该函数返回一个数组,其中第二个元素为对象更新前后的差异,一个差异对象大致有以下结构:
{
foo: {
bar: {
changeType: 'add' // can be "add", "change" or "remove",
oldValue: [1, 2, 3],
newValue: [2, 3, 4]
}
}
}
我们可以对差异对象进行简单的遍历,其中通过isDiffNode
函数判断的节点即为差异节点,因此我们可以找到对象更新前后的最小差异
需注意的是当前版本并未实现数组类型的差异描述
Return:
Array | 函数返回一个数组,结构为 |