如果在我的React应用程序中,使用Redux和redux-thunk,我的商店有一组相对轻量级/非规范化的项目,用于列表中的所述项目(在API中分页),但之后我也有了编辑/为每个添加选项(与清单数组中的项目相同但有许多其他字段,未进行非规范化等),我不知道以下哪种方法是存储在我的商店中的最佳方法:
state.currentItem
对象。由于实际列表项对象的数据密集性,我必须使用选项2/3,但现在我有两个地方的冗余数据,可以想象不会同步(尽管实际上,在我的应用程序中,由于分页/排序,我必须在返回到列表时重新轮询来自API的最新数据)或可以包含两种不同对象格式的项目的项目数组。
两者都感觉很脏,这让我相信我错过了一些显而易见的事情,即redux已经具备了处理能力。建议?其他选择?
答案 0 :(得分:0)
用户可以同时更新多个项目吗? Redux尊重3 important principles。其中一个是单一的事实来源,这意味着所有有效/真实数据必须来自一个地方(在此存储),每个数据元素只存储一次。有多次在商店中相同的项目是不好的,主要是因为像你说的同步问题。拥有深层物体也不是一个好方法,你应该保持你的状态平坦。由于您使用的是与redux的反应,因此您可以访问state,使用redux访问app状态,使用react进行组件状态访问。出现此类问题的最常见模式是创建在组件状态下编辑的对象的副本。如果用户取消编辑,则很容易还原它。如果用户在不保存的情况下停止编辑项目,则您的应用状态不会受到影响。此外,您将避免使用错误或重复的数据污染您的应用程序状态。假设当用户点击某个项目时,在您的列表中,该项目将转换为文本输入。列表项将基于redux商店项目,文本输入将基于同一项目的副本。这也适用于新对象。您还可以在添加/更新项目之前验证您的项目。请记住,最重要的部分是保持商店清洁,因为您将基于此显示项目,因此获取新项目不会影响您的列表。这样做还可以帮助您更新商店中的商品,因为您只需在分派保存操作时将其替换。