16

我正在学习 ngxs,但我不明白什么时候应该使用patchStateand setState?有什么不同?

const state = ctx.getState();
let data =  this.service.list();
ctx.setState({
    ...state,
    feedAnimals: data
});

对比

let data =  this.service.list();
ctx.patchState({
    feedAnimals: data
});
4

2 回答 2

19

这两段代码是等价的。 patchState只是setState({...state, ... }代码的简写版本。

将来patchState很可能会演变成一个更有用的不变性助手,包括相等测试(即,只有在补丁实际更改任何值时才会更改状态)和补丁运算符(这仍在讨论中)。

我建议使用patchState整洁并利用即将推出的功能。

于 2018-05-22T08:29:50.200 回答
17

它不能正常工作

const state = context.getState();
state.permissions = action.payload;
context.setState(state);

有用

const state = context.getState();
state.permissions = action.payload;
context.setState({ ...state });

有用

const state = context.getState();
state.permissions = action.payload;
context.patchState(state);

所有的例子都更新了状态......但是第一个没有激活可观察的状态变化,因为状态是不可变的,这意味着你不能简单地编辑和保存它,它是不可编辑的,你总是必须克隆旧状态,编辑您的新副本并保存这个新状态。patchState只是为你做。

于 2018-06-15T04:40:04.643 回答