我在TypeScript中使用immer.js创建的reducer遇到问题。
我不理解以下内容:
当我在初始状态下使用对象文字{}时,不变性可以很好地工作,但是一次
const byId = (state = {}, action) =>
produce(state, draft => {
switch (action.type) {
case RECEIVE_PRODUCTS:
...
)
}
})
我将文字改为对象不变性实例停止工作
const byId = (state = new SomeObject(), action) =>
produce(state, draft => {
switch (action.type) {
case RECEIVE_PRODUCTS:
...
)
}
})
你能知道为什么吗?
谢谢..
答案 0 :(得分:0)
通常,您希望produce
的第一个参数是普通对象或数组。
可选地,它可能是“沉浸式类”,尽管我对具体含义并不熟悉(听起来对我来说是一种内在的东西),但是您的new SomeObject()
调用返回的内容不太可能。
https://github.com/immerjs/immer/blob/master/src/immer.js#L61
如果produce
的第一个参数不是其中的一个,那么它将不会被“草稿”。
https://github.com/immerjs/immer/blob/master/src/common.js#L20
答案 1 :(得分:0)
I have created parent object
export class Immerable {
public [immerable] = true;
}
and all classes which I need to use within produce function has this parent. Thanks.