Immer reducer不适用于Typescript

时间:2019-05-14 17:05:15

标签: reactjs redux immer.js

我在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:
               ...
)
        }
    })

你能知道为什么吗?

谢谢..

2 个答案:

答案 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.