在我们正在进行的项目中,我们有一个包含日期的公共接口。当我们将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.还有什么其他办法来处理这种情况?
- redux是否期望使用它的项目以字符串格式存储日期,并仅在需要日期属性时才解析它们?
1条答案
按热度按时间9bfwbjaz1#
不要在选择器中转换它们,你可以直接使用从状态中获得的值作为useEffects的依赖项作为时间戳,然后你可以对它做任何你想做的事情。不要使用创建的对象作为useEffect的依赖项,而是使用时间戳或日期作为字符串,对象具有不同的引用,即使它们具有相同的值
比较对象与比较数字或字符串不同,对象按引用而不是按值进行比较
并且,不将不可序列化的值存储在状态中是*Redux的最佳实践。
请访问https://redux.js.org/style-guide/#do-not-put-non-serializable-values-in-state-or-actions