首页 > 解决方案 > Redux 状态和 momentjs

问题描述

我的 redux 状态有几个日期。

在我的应用程序中,我只想操纵时刻对象。

为了实现这一点,我添加了一个函数,它接受我的 AJAX 查询,并记录我所有的日期。

但是当我检查我在商店中得到的东西时,我仍然有一个字符串 ( "2018-07-10T08:31:09.877Z"),它似乎是JSON.stringify我的 moment 对象的版本。

我该怎么处理这个?我知道我可以listeners在商店中拥有,但是,在将状态反序列化为对象时,这不会添加处理。

我很惊讶我没有在网上找到任何东西,除了这个 issue,因为它涉及持久存储,所以更加具体。

干杯

标签: reduxreact-reduxmomentjs

解决方案


Redux 文档强烈建议只将普通的可序列化对象放在 Store 中。

正因为如此,我正在处理与您的情况相同的情况,因为有一个Selector layer,我以正确的格式获取所需的 Store 数据,然后在组件中使用格式化(计算)数据。

所以这是我可以推荐给你的流程:

  1. 将商店的日期保留在 UNIX 时间戳中。
  2. 有一个Selector 层,您将在其中访问 Store 并将 UNIX 时间戳转换为 Moment 对象。你可以玩reselect library
  3. 在您的组件中,您将获得 Store 的对象,就像调用选择器一样。

我可以将函数、承诺或其他不可序列化的项目放入我的 store 状态吗?

强烈建议您只将普通的可序列化对象、数组和原语放入您的存储中。在技​​术上可以将不可序列化的项目插入到 store 中,但这样做会破坏持久化和重新水化 store 内容的能力,并干扰时间旅行调试。

如果您对持久性和时间旅行调试等可能无法按预期工作的事情感到满意,那么完全欢迎您将不可序列化的项目放入您的 Redux 存储中。最终,它是您的应用程序,您如何实现它取决于您。与有关 Redux 的许多其他事情一样,请确保您了解所涉及的权衡。


推荐阅读