代码之家  ›  专栏  ›  技术社区  ›  Augustin Riedinger

还原状态和时间

  •  1
  • Augustin Riedinger  · 技术社区  · 6 年前

    我有好几次约会是在我的还原状态。

    在我的应用程序中,我只想操纵 moment 物体。

    为了实现这一点,我添加了一个接受Ajax查询的函数,并且 使想起 我所有的约会。

    但是当我检查我在店里买的东西时,我仍然有一根绳子( "2018-07-10T08:31:09.877Z" )这似乎是 JSON.stringify 我的时刻对象的版本。

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

    我很惊讶我没有在网上找到任何东西,另外 this issue 更具体的是,因为它处理的是持久的商店。

    干杯

    2 回复  |  直到 6 年前
        1
  •  0
  •   Jordan Enev    6 年前

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

    因为这个,我和你的案子一样 选择器层 在这里,我得到了正确格式的所需存储数据,然后在组件中使用格式化(计算)的数据。

    我可以向您推荐以下流程:

    1. 在Unix时间戳中保留商店的日期。
    2. 有一个 选择器层 ,您将访问存储并将Unix时间戳转换为矩对象。你可以玩 reselect library .
    3. 在组件中,您将获得存储的对象,如调用选择器。

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

    强烈建议您只放置普通的可序列化对象, 数组和基元到您的存储中。技术上可以 将不可序列化的项插入存储区,但这样做可能会中断 保存和再水化存储内容的能力,以及 干扰时程调试。

    如果您对持久性和时间旅行调试之类的事情满意的话 可能不按预期工作,那么您完全可以 将不可序列化的项放入Redux存储区。最终,它是 您的应用程序以及如何实现它取决于您自己。和许多人一样 关于Redux的其他事情,只要确保你了解什么是权衡。 参与其中。

        2
  •  0
  •   Augustin Riedinger    6 年前

    对于未来的读者来说,我最终彻底改变了主意:使用一个选择器工作,但是我也有来自存储其他部分表单输入的数据,而那些数据处理起来没有意义。 reselect .

    因此,我决定以iso字符串格式存储日期。( "2018-07-10T08:31:09.877Z" )以及 moment 尽可能晚地调整它们(例如 <DatePicker type='date' value={moment(this.props.value)} /> )

    这不太优雅,可能有点不太好用,但我有更多的控制力。

    如果有人想出一个更好的解决方案,我会很高兴看到它!