如何在NGXS中使用patchState vs setState?

Але*_*лов 9 state-management ngxs angular-state-managmement

我学习ngxs但是当我应该用我无法理解patchStatesetState?有什么不同?

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

let data =  this.service.list();
ctx.patchState({
    feedAnimals: data
});
Run Code Online (Sandbox Code Playgroud)

Mar*_*eld 14

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

将来patchState很可能会发展成为一个更有用的不变性助手,它具有相等性测试(即状态只有在补丁实际改变任何值时才会改变)和补丁操作符(这仍在讨论中).

我建议使用patchState整洁,并利用他们的方式的功能.


Mic*_*lis 12

它不能正常工作

const state = context.getState();
state.permissions = action.payload;
context.setState(state);
Run Code Online (Sandbox Code Playgroud)

有用

const state = context.getState();
state.permissions = action.payload;
context.setState({ ...state });
Run Code Online (Sandbox Code Playgroud)

有用

const state = context.getState();
state.permissions = action.payload;
context.patchState(state);
Run Code Online (Sandbox Code Playgroud)

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