【问题标题】:How to overcome "A non-serializable value detection"如何克服“A non-serializable value detection”
【发布时间】:2020-09-26 05:11:59
【问题描述】:

我正在使用 redux-toolkit 实现 react 应用,从 firestore 获取数据时出现此类错误。

在操作中检测到​​不可序列化的值,路径为:payload.0.timestamps.registeredAt

在路径中的操作中检测到​​不可序列化的值:payload.0.profile.location

前者的数据类型为firebase.firestore.Timestamp,后者为GeoPoint
我认为两者都可能无法序列化,但我想获取这些数据并将它们展示给用户。
我怎样才能克服这些错误?
根据this issue,我可能会这样写;

const store = configureStore({
 reducer: rootReducer,
 middleware: [
  ...getDefaultMiddleware({
  serializableCheck: {
     ignoredActionPaths: ['meta.arg', 'meta.timestamp'], // replace the left to my path
     },
  }),
  reduxWebsocketMiddleware,
 // ... your other middleware
],
});

但我不确定它是否安全,即使安全,我也不知道如何编写路径动态方式,因为我的有效载荷是数组。


如果有人能提供一些线索,我将不胜感激。

【问题讨论】:

    标签: firebase redux google-cloud-firestore redux-toolkit redux-middleware


    【解决方案1】:

    去看看

    Getting an error "A non-serializable value was detected in the state" when using redux toolkit - but NOT with normal redux

    根据 Rahad Rahman 的回答,我在 store.ts 中做了以下操作:

    export default configureStore({
        reducer: {
            counter: counterReducer,
            searchShoes: searchShoesReducer,
        },    
        middleware: (getDefaultMiddleware) => getDefaultMiddleware({
            serializableCheck: false
        }),
    });
    

    【讨论】:

      【解决方案2】:

      解决此问题的最佳方法是将这些数据转换为可序列化的数据,以便您可以安全地存储在您的状态中。 根据风格指南,你should not put Non-Serializable Values in State or Actions

      在 reducer prepare 函数中这样做是一个好地方。

      【讨论】:

        猜你喜欢
        • 2012-08-06
        • 2021-10-30
        • 2021-03-26
        • 2019-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多