redux - 如何从不同模型引用的模型中删除记录?
问题描述
我有两个模型,其中模型 A 引用模型 B 中的项目。当我从模型 B 中删除项目时,在我可以更新模型 A 以删除引用的项目之前做出反应重新渲染。
例子:
我有一个饲料。提要由不同类型的项目组成。每种类型的项目都存储在其各自的模型中。提要订单存储为项目 ID 数组,引用其不同子商店中的项目。
我在这里做了一个最小的失败示例。点击按钮三次后出现此问题
https://codesandbox.io/s/deleting-referenced-items-kmw1e
关键线是
else console.error(">>>> feed order contains deleted item", id);
提要订单可能包含已删除的项目是有问题的,因为这可能意味着存在导致错误引用的编程错误。在这种情况下,这不是编程错误,只是第二个商店还没有更新。
有没有办法可以批量处理createAndDeleteTodo
, 在整个 thunk 和所有 subthunk 完成之前不评估所有听众?
在上面的示例中,只需一个主操作来更新提要订单和项目就足够微不足道了,但是如果存在不止一种类型的项目,因为每种项目类型都存在于它自己的各自模型中,这会让人觉得很麻烦。
解决方案
同一个 thunk 动作正在触发多个动作。并且根据 的定义useStoreState
:
每当您的商店状态发生更新时,useStoreState 都会执行
因此,实际上,当您在 thunk 中执行此操作时:
actions.setTodos({ newTodos: [newTodo], todoToDelete });
actions.updateFeedOrder({ newTodos: [newTodo], todoToDelete });
有两个动作被分派,它们将解释一个单独的存储状态更改事件侦听器。您将收到多个商店更新的多个渲染调用。
你有两个选择:
- 如示例所示,将这些操作合并为一个:https : //codesandbox.io/s/so-deleting-referenced-items-forked-x4d7v
- 或检查 useStoreState 方法以了解仅当两个存储值都与计数匹配时处理渲染的情况
推荐阅读
- java - Java JNDI API 用户无法通过多林设置向 AD 进行身份验证
- sql-server - 用于从 Alteryx 调用 SQL Server 存储过程的 ODBC 与 OLEDB
- android - 尝试在 AOSP 中运行 ButterKnife,返回 NullPointerException
- c# - 服务器标记格式不正确 - ID 中的 Eval 错误
- php - 没有选择过滤产品以获得更低或更高的价格 PHP MYSQL Jquery
- python - 用一些列表展平列表列表有多个值 - python
- r - 如何获得闪亮的反应数据表输出,然后将函数应用于过滤后的数据?
- python - 从文本中删除所有表情符号
- json - 协议缓冲区生成类型的属性
- python - 优化python代码以读取文件