Immer reducer 不适用于 Typescript
Immer reducer does not work with Typescript
我在使用 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:
...
)
}
})
有人知道为什么吗?
谢谢..
您通常希望 produce
的第一个参数是普通对象或数组。
可选地,它可以是 "immerable class",虽然我不熟悉它具体是什么(对我来说听起来像是内部的东西)但它不太可能是你的 new SomeObject()
所说的 returns.
https://github.com/immerjs/immer/blob/master/src/immer.js#L61
如果 produce
的第一个参数不是其中之一,那么它就不会是 "drafted"。
https://github.com/immerjs/immer/blob/master/src/common.js#L20
我已经创建了父对象
export class Immerable {
public [immerable] = true;
}
以及我需要在 produce 函数中使用的所有 类 都有这个父级。谢谢
我在使用 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:
...
)
}
})
有人知道为什么吗?
谢谢..
您通常希望 produce
的第一个参数是普通对象或数组。
可选地,它可以是 "immerable class",虽然我不熟悉它具体是什么(对我来说听起来像是内部的东西)但它不太可能是你的 new SomeObject()
所说的 returns.
https://github.com/immerjs/immer/blob/master/src/immer.js#L61
如果 produce
的第一个参数不是其中之一,那么它就不会是 "drafted"。
https://github.com/immerjs/immer/blob/master/src/common.js#L20
我已经创建了父对象
export class Immerable {
public [immerable] = true;
}
以及我需要在 produce 函数中使用的所有 类 都有这个父级。谢谢