Redux工具包可序列化中间件不工作

atmip9wb  于 2023-02-08  发布在  其他
关注(0)|答案(1)|浏览(283)

我在redux工具包中遇到了一个serializableMiddleware问题。我需要在我的redux存储中存储firestore时间戳,并且不希望serializableMiddleware记录此文本:
在状态中检测到不可序列化的值,路径为:path to timestamp。数值:nt {秒:〉1675422816,纳秒:106000000}查看处理此动作的减速器。
所以我看了一下redux工具包文档中的serializableMiddleware,发现有一个选项isSerializable?: (value: any) => boolean。当我从这个方法返回true时,value应该认为是可序列化的,但是即使我总是返回true,仍然会将错误记录出来。
我写了函数但它不起作用:

const isSerializable = (value: any) => 
    value instanceof Timestamp || isPlain(value);

const serializableMiddleware = createSerializableStateInvariantMiddleware({
    isSerializable
})

下面是我如何设置我的商店:

export const setupStore = () => {
    return configureStore({ 
        reducer: rootReducer,
        middleware: (getDefaultMiddleware) => 
            getDefaultMiddleware()
            .concat(serializableMiddleware)
    })
}
t5zmwmid

t5zmwmid1#

这里的问题是getDefaultMiddleware() * 已经 * 添加了可序列化中间件作为默认设置的一部分,您正在创建中间件的 * 第二个 * 示例,但这并没有更改 * 第一个 * 示例。
相反,您需要通过向getDefaultMiddleware()传递正确的选项来定制第一个示例:

export const setupStore = () => {
    return configureStore({ 
        reducer: rootReducer,
        middleware: (getDefaultMiddleware) => 
            getDefaultMiddleware({
             serializableCheck: {
               isSerializable: myCustomIsSerializableFunction
             }
            })
    })
}

相关问题