我有一个函数,从外部代码中调用。它的作用应该是根据传递的数据在我的redux存储中创建一个对象,并返回对象的ID作为未来更新的句柄:
const addNode = (data) => {
dispatch(createNode(data));
...
return createdNodeId;
}
我的问题是:如何获取触发分派操作后创建的对象的ID?
分派操作返回完整状态,而不仅仅是新对象。我看到了几个选项,但我不确定哪个最好...
选项1:生成并传递ID
在addNode中自己生成ID,并将其与其他数据一起传递给createNode(...)。
从实际角度来看,这可能是最容易的,但从概念上讲,我认为它非常糟糕。以前的内部ID生成策略突然暴露在我的函数中,并且更重要的是,根据ID策略,我可能不得不处理各种ID冲突和/或同步以避免这些问题。
选项2:从结果状态中提取ID
我想可以从结果状态中推断出新节点。但这可能会变得非常复杂,更不用说缓慢了...
选项3:在操作中回传ID
操作应该是不可变的。但是,如果我在我的操作中指定一个“result”属性,那么reducer会将所需信息写入其中以传递出去,实际上会发生什么?在我看来,只要reducer从不将“result”属性视为操作输入负载的一部分,这应该可以正常工作。
这仍然有点危险,因为操作现在部分可变。但考虑到其他选项,这是我目前最喜欢的选项。
编辑:之前曾提出过一个类似的问题,但答案是更改reducer以避免需要结果。可悲的是,这里没有这个选项。