Redux 如何从其他模型引用的模型中删除记录?

Redux 如何从其他模型引用的模型中删除记录?,redux,react-redux,easy-peasy,Redux,React Redux,Easy Peasy,我有两个模型,其中模型A引用了模型B中的项目。当我从模型B中删除项目时,在我更新模型A以同时删除引用的项目之前,对重新提交做出反应 例如: 我有饲料。提要由不同类型的项组成。每种类型的项目都存储在其各自的模型中。 提要顺序存储为项目ID数组,引用其不同子存储中的项目 我在这里举了一个最小的失败例子。单击按钮三次后出现问题 关键是 else控制台。错误(“>>>>提要订单包含已删除的项目”,id); 提要顺序可能包含已删除的项,这是有问题的,因为这可能意味着存在导致错误引用的编程错误。在这种情

我有两个模型,其中模型A引用了模型B中的项目。当我从模型B中删除项目时,在我更新模型A以同时删除引用的项目之前,对重新提交做出反应

例如:

我有饲料。提要由不同类型的项组成。每种类型的项目都存储在其各自的模型中。 提要顺序存储为项目ID数组,引用其不同子存储中的项目

我在这里举了一个最小的失败例子。单击按钮三次后出现问题

关键是

else控制台。错误(“>>>>提要订单包含已删除的项目”,id);
提要顺序可能包含已删除的项,这是有问题的,因为这可能意味着存在导致错误引用的编程错误。在这种情况下,这不是编程错误,第二个存储区还没有更新

是否有一种方法可以批处理
createAndDeleteTodo
,在整个thunk和所有子chunk完成之前不计算所有侦听器


在上面的例子中,只需要一个主操作来更新提要订单和项目就足够了,但是如果有不止一种类型的项目,因为每种项目类型都存在于其各自的模型中,则会感觉很麻烦。

问题似乎在于您要将其分派到redux store 2次。首先是在创建新项目时,然后是在删除项目时

我建议这样做:

  • 创建要使用的对象/阵列的深度副本
  • 对该副本执行两个操作
  • 将该值分派到存储

  • 这样,在两个操作完成之前,不会重新请求任何操作。

    相同的thunk操作会触发多个操作。根据
    useStoreState
    的定义:

    useStoreState将在对存储状态进行更新时执行

    因此,实际上,当你在thunk中这样做时:

      actions.setTodos({ newTodos: [newTodo], todoToDelete });
      actions.updateFeedOrder({ newTodos: [newTodo], todoToDelete });
    
    有两个操作被调度,它们将解释一个独立的存储状态更改事件侦听器。您将获得多个存储更新的多个渲染调用

    您有两个选择:

    • 将这些动作合并为一个动作,如示例所示:
    • 检查useStoreState方法,了解仅当两个存储值都与计数匹配时处理渲染的情况

    这与“一个主操作更新进货订单和项目”不一样吗?选项1(在问题陈述中提到)和选项2看起来都很麻烦。对于数组中的一种类型来说,这是微不足道的,但是如果在这个提要中有许多模型,那么它们就会变得杂乱无章。另请注意,从您的代码沙盒-不要在thunk中修改状态“当您能够通过此API访问存储的状态时,您的thunk不应执行此状态的任何变异”@david_adler虽然thunk不需要修改状态,但类似的做法是在一个更新存储的操作中保持一致。处理这种情况的方法是,要么更新一个存储,要么只允许在所需存储处于给定状态时重新渲染。作为最佳实践,对于给定的组件,保持一个存储对象作为真值的来源,并确保仅在该存储值更新时才渲染它。这意味着为该视图组件创建嵌套对象,并一次性更新它。链接多个API调用并在一个操作中更新。我认为派生状态/计算变量可能是处理此边缘情况的更好方法,但它对更新数组的控制较少。