gpt4 book ai didi

javascript - 将 Immer 与 NgRx reducer 集成

转载 作者:行者123 更新时间:2023-11-30 19:05:28 25 4
gpt4 key购买 nike

查看 redux 和 ngrx,immer 似乎是在存储之前生成状态副本的推荐库。按照 immer 示例,我将以下代码添加到我的 reducer 中:

  on(exampleActions.updateExample, (state, { example }) => {

return produce((state: ExampleType, draft: ExampleType) => {
draft.push({ example });
draft[1].done = true;
});

})

typescript 提示 no-shadowed-variable,这与示例冲突。此外,我无法在没有返回类型错误的情况下返回值。

example 是多级对象的情况下:

const example = {
a: {
b: { c: 1 }
}
};

draft 也需要完全取消引用。

immer 和 createReducer 集成的示例并不多,因为这是 2019 年的最新更改。我是否应该禁用 no-shadowed-variable 规则immer 或者是否有更好的模式来确认 stateexample 都被正确地取消引用。 example 是一个多层次的对象。

或者,我可以避免使用 immer 并使用 ramda clone 或尝试手动深度复制所有内容。

最佳答案

这就是ngrx-etc求解,使用 mutableOn 函数(使用 Immer)

const entityReducer = createReducer<{ entities: Record<number, { id: number; name: string }> }>(
{
entities: {},
},
mutableOn(create, (state, { type, ...entity }) => {
state.entities[entity.id] = entity
}),
mutableOn(update, (state, { id, newName }) => {
const entity = state.entities[id]
if (entity) {
entity.name = newName
}
}),
mutableOn(remove, (state, { id }) => {
delete state.entities[id]
}),
)

可以找到源代码here ,您应该朝着正确的方向前进。

关于javascript - 将 Immer 与 NgRx reducer 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59037865/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com