Redux,存储redux商店之外的数据

时间:2016-10-17 02:55:53

标签: redux redux-thunk

我正在制作日历应用。

当用户导航到下个月时, 我想启动获取数据的操作。

要触发的操作列表本质上是动态的,它取决于当前安装的组件。

我目前正在列表中列出要触发的动作列表(在模块中)

我觉得我通过在redux商店之外存储数据来做一些不常规的事情 但我在某处读到,redux商店应该包含可序列化的东西。我的行为(实际上是由redux-thunk使用的动作创建者)不可序列化。

所以问题是,

  1. 将数据存储在redux商店之外是不是一个坏主意,如果是这样,为什么?
  2. 为什么在redux商店中存储不可序列化的数据是个坏主意?
  3. 动作创建者(我存储在列表中)如下所示

    function foo(params) {
      var url = "some-url"
      return (dispatch, getState) => {
         fetch(url, params).then(..).then(dispatch(someAction))
      }
    }
    

2 个答案:

答案 0 :(得分:0)

您的列表不是数据,而是代码。这是一个命令列表,这些命令实际上都是代码。你可以把它存放在州外。

但您的列表应该是JavaScript。您可以使用if进行分支,并使用switch进行复杂的图灵完全动态调整。它应该只是一个thunked行动创造者。

至于为什么你的状态应该是可序列化的:所以你可以序列化它。有些工具和模块需要状态可序列化,但它是可选的。然而,它迫使你的国家成为数据。

也就是说,当使用Immutable.js时,状态现在是一个复杂的对象。您仍然可以序列化它,但不能使用JSON.stringify。因此,如果你可以编写一个函数,任何可以序列化状态的函数,你可以声称状态是可序列化的。

答案 1 :(得分:0)

虽然技术上没有什么"错误"根据您目前采用的方法,它有点像反模式。通常,如果你想根据某些条件执行某些逻辑,你就不会通过存储函数来调用数组来实现它。你当然会使用ifswitch作为上述答案指出,所以你不应该在这里做。

为什么不为异步操作添加中间件,并在用户导航到下个月时选择调度的操作。此中间件将为此操作调用处理程序,您可以在其中调度您想要的其他操作。无论如何,这对我来说似乎更清洁了。