我正在制作日历应用。
当用户导航到下个月时, 我想启动获取数据的操作。
要触发的操作列表本质上是动态的,它取决于当前安装的组件。
我目前正在列表中列出要触发的动作列表(在模块中)
我觉得我通过在redux商店之外存储数据来做一些不常规的事情 但我在某处读到,redux商店应该包含可序列化的东西。我的行为(实际上是由redux-thunk使用的动作创建者)不可序列化。
所以问题是,
动作创建者(我存储在列表中)如下所示
function foo(params) {
var url = "some-url"
return (dispatch, getState) => {
fetch(url, params).then(..).then(dispatch(someAction))
}
}
答案 0 :(得分:0)
您的列表不是数据,而是代码。这是一个命令列表,这些命令实际上都是代码。你可以把它存放在州外。
但您的列表应该是JavaScript。您可以使用if
进行分支,并使用switch
进行复杂的图灵完全动态调整。它应该只是一个thunked行动创造者。
至于为什么你的状态应该是可序列化的:所以你可以序列化它。有些工具和模块需要状态可序列化,但它是可选的。然而,它迫使你的国家成为数据。
也就是说,当使用Immutable.js时,状态现在是一个复杂的对象。您仍然可以序列化它,但不能使用JSON.stringify
。因此,如果你可以编写一个函数,任何可以序列化状态的函数,你可以声称状态是可序列化的。
答案 1 :(得分:0)
虽然技术上没有什么"错误"根据您目前采用的方法,它有点像反模式。通常,如果你想根据某些条件执行某些逻辑,你就不会通过存储函数来调用数组来实现它。你当然会使用if
和switch
作为上述答案指出,所以你不应该在这里做。
为什么不为异步操作添加中间件,并在用户导航到下个月时选择调度的操作。此中间件将为此操作调用处理程序,您可以在其中调度您想要的其他操作。无论如何,这对我来说似乎更清洁了。