Redux状态和momentjs

时间:2018-07-20 10:41:31

标签: redux react-redux momentjs

我的还原状态有几个约会。

在我的应用中,我只想操作moment个对象。

为此,我添加了一个函数,该函数接受AJAX查询,并对所有日期进行 momentize

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

我应该如何处理?我知道我可以在商店中购买listeners,但是在将状态反序列化为对象时,这不会添加处理。

令我感到惊讶的是,除了this issue之外,我在网上还没有找到其他任何东西,因为它可以处理商店的持久性,因此更为具体。

欢呼声

2 个答案:

答案 0 :(得分:0)

Redux文档强烈建议仅将普通的可序列化对象放入商店中。

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

因此,我可以向您推荐以下流程:

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

Can I put functions, promises, or other non-serializable items in my store state?

  

强烈建议您只放置简单的可序列化对象,   数组和图元放入您的商店。从技术上讲   将不可序列化的商品插入商店,但这样做可能会破坏   持久性和补给存储内容的能力   会干扰时间旅行调试。

     

如果您对持久性和时间旅行调试之类的东西没问题   可能无法按预期工作,那么我们完全欢迎您   将不可序列化的商品放入您的Redux商店。最终,   您的应用程序以及如何实现它取决于您。和许多一样   关于Redux的其他事情,只要确保您了解什么折衷   参与其中。

答案 1 :(得分:0)

对于将来的读者,我最终完全改变了主意:使用选择器有效,但是我也有来自商店其他部分表单输入的数据,而使用{{ 1}}。

因此,我决定将日期存储为ISO字符串格式(reselect),并尽可能晚地"2018-07-10T08:31:09.877Z"对其进行大小写(例如moment)。

这不太优雅,性能可能会降低一些,但我有更多的控制权。

如果有人想出更好的解决方案,我很乐意阅读!