Redux -正确处理存储中的日期类型

mhd8tkvw  于 2023-01-30  发布在  其他
关注(0)|答案(1)|浏览(138)

在我们正在进行的项目中,我们有一个包含日期的公共接口。当我们将redux添加到项目中时,我们遇到了一个问题,即在内部存储包含日期的对象时收到警告
A non serialized value was detected in the state...
因此,我们更新了代码,以便在将对象存储在存储器中时,在reducer中将日期转换为字符串,并在选择器中将其转换回日期。

...
reducers: {
  itemAdded(state, action) {
    state.items.push(stringfyDates(action.payload))
  }
  ...
}
...
selectItems = (root) => root.slice.items.map(destrigfyDates)

这修复了问题,但我们遇到了一个新问题,当我们在useEffect依赖项中使用日期时,效果会在每次渲染中触发,因为每次渲染中有不同的日期对象。
这让我们觉得我们可能处理得不对。
我的问题是
1.我们用来在数据库中存储日期的模式是反模式吗?
1.还有什么其他办法来处理这种情况?

  1. redux是否期望使用它的项目以字符串格式存储日期,并仅在需要日期属性时才解析它们?
9bfwbjaz

9bfwbjaz1#

不要在选择器中转换它们,你可以直接使用从状态中获得的值作为useEffects的依赖项作为时间戳,然后你可以对它做任何你想做的事情。不要使用创建的对象作为useEffect的依赖项,而是使用时间戳或日期作为字符串,对象具有不同的引用,即使它们具有相同的值

比较对象与比较数字或字符串不同,对象按引用而不是按值进行比较

并且,不将不可序列化的值存储在状态中是*Redux的最佳实践

  • 承诺
  • 类示例
  • 日期
  • ...

请访问https://redux.js.org/style-guide/#do-not-put-non-serializable-values-in-state-or-actions

相关问题