我正在将Redux代码迁移到RTK。
对于我的遗留代码库,我使用Immutable.js(出于不变性目的),我不再需要它来编写我将要编写的新代码,但我希望遗留代码在不接触它的情况下继续工作,同时使用RTK的configureStore
。但我的应用程序抛出:
不变式失败:在路径“app._values._tail.array.0._values._root.array.0.array.16._defaultValues.gcm.__hash”中,在调度之间检测到状态突变。这可能会导致不正确的行为。(https://redux.js.org/style-guide/style-guide#do-not-mutate-state)
我明白了,这是因为我改变了对象示例,我可以禁用错误这样做:
immutableCheck: false,
serializableCheck: false,
但是IMO它禁用了太多,我想保持这些设置,但是对于Immutable.js来说,要绕过不变性检查。我发现了这段过时的代码,看起来像我想实现的
// Augment middleware to consider Immutable.JS iterables serializable
const isSerializable = (value) =>
Iterable.isIterable(value) || isPlain(value)
const getEntries = (value) =>
Iterable.isIterable(value) ? value.entries() : Object.entries(value)
const serializableMiddleware = createSerializableStateInvariantMiddleware({
isSerializable: () => true // all values will be accepted
isSerializable,
getEntries,
})
const store = configureStore({
reducer,
middleware: [serializableMiddleware]
})
这里是https://github.com/reduxjs/redux-toolkit/pull/141/files,但它不工作,Iterable
现在是Collection
,没有isIterable
功能,我试过isImmutable
,但它也不工作。
现在文件看起来像这样:https://github.com/reduxjs/redux-toolkit/blob/master/docs/api/otherExports.mdx,没有Immutable.js的踪迹。
我该怎么办?
1条答案
按热度按时间iklwldmw1#
@EskiMojo14,RTK上的一个维护者能够为我找到一个解决方案:
serializableCheck和immutableCheck是两个独立检查,我们希望您使用
getDefaultMiddleware
对它们进行自定义。例如,下面的代码(未经测试)可能会工作: