【发布时间】:2019-05-07 10:15:09
【问题描述】:
我有一个从外部代码调用的函数。它的效果应该是根据传递的数据在我的 redux 存储中创建一个对象,并返回对象的 id 作为将来更新的句柄:
const addNode = (data) => {
dispatch(createNode(data));
...
return createdNodeId;
}
我的问题是:如何获取作为调度操作的结果创建的对象的 id?
调度返回完整状态,而不仅仅是新对象。我看到了几个选项,但我不确定哪个是最好的......
选项 1:生成并传递 ID
自己在 addNode 中生成 id 并将其与其余数据一起传递给 createNode(...)。
从实践的角度来看,这可能是最简单的,但从概念的角度来看,我觉得这很可怕。以前的内部 id 生成策略突然暴露在我的函数中,而且,根据 id 策略,我可能必须处理各种 id 冲突和/或同步以避免这些。
选项 2:从结果状态中提取 ID
我想可以从结果状态中推断出新节点。但这很快就会变得非常复杂,别介意慢...
选项 3:将 ID 传递回去
动作应该是不可变的。但是,如果我在我的操作中指定一个“结果”属性,reducer 将写入该属性以传递所需的信息,实际上会发生什么?据我了解,只要“result”属性永远不会被reducer视为操作输入有效负载的一部分,这应该可以正常工作。
这仍然有点狡猾,因为动作现在是部分可变的。但考虑到其他选项,这是我现在最喜欢的。
编辑: 之前有人问过similar question,但答案是更改减速器以避免需要结果。遗憾的是,这不是一个选项。
【问题讨论】:
-
我认为您正在尝试做的更多细节在这里会有所帮助,因为人们可以建议替代结构来帮助完成您需要做的事情。这个问题的核心似乎是“#3 好吗?”。由于缺乏详细的原因,很难说它是如何not-okay,但它表明您需要调度操作返回值来构建内部应用程序状态,这将违反核心原则在 redux 中,store 是唯一的真实来源。
标签: javascript redux