reactjs - 一个动作更新多个减速器性能问题
问题描述
在当前的应用程序中,我设置了多个 redux reducer 来存储数据。让我们称它们为“user-reducers”和“pet-reducers”。这两个非常相似,它们都有一个帖子[]。现在,每当用户喜欢帖子 [] 中的帖子时,就会触发一个动作“likeDone”。现在我有 2 种选择来实现 redux 更新:
选项 1:“user-reducers”和“pet-reducers”都听“likeDone”。IMO,当我有更多类似的减速器并且所有这些减速器都列出一个动作时,这在后期阶段效率低下。
选项 2:将“likeDone”更改为 2 个更明确的操作,例如。'likeUserPostDone' 'likePetPostDone' 每个reducer都会对匹配的动作做出反应。这样,reducer 更新似乎更有效,但稍后会有更多的动作类型,最终会出现很多“switch - case”,我不确定这是否是一个好习惯。
感谢阅读,请告诉我最适合我的情况。
解决方案
如果两个 reducer 在动作发生时都发生了变化,那么让两个减速器都听你的动作。所有 redux reducer 都有效地监听所有调度的动作。如果它不改变状态,他们会忽略动作。
const petPostReducer = (prev = defaultValue, action = {}) => {
const { type, payload} = action;
switch (type) {
case "LIKE_DONE": {
const {id} = payload || {};
const oldItem = prev[id] || {}
const newItem = {...oldItem, like: true}
return {
...prev
[id]: {...updateItem, [id]: newItem};
}
default: {
return prev; // Ignore all other actions != LIKE_DONE
}
}
};
创建更明确的操作很好,但是当您有不同的操作时,您通常希望这样做。(总有例外)
如果可能,请避免在 reducer 中使用逻辑。
如果宠物和用户数据非常相似,请考虑更改您的状态形状并使用一个减速器帖子。
console.log(state.posts) =>
{
0: {type: 'user' like: false},
1: {type: 'pet' like: false},
2: {type: 'user' like: true},
}
请避免过早优化。我经常做一些效率较低的事情,以支持简单、简洁、不可变、可读和有用的代码。如果您的目标是功能手机或发现真正的性能瓶颈,则需要使用性能监控工具进行测量。JavaScript 引擎优化不断改进,结果往往令人惊讶。
推荐阅读
- string - 查找一个字符串并将其整行复制到一个新文件中
- c - switch 和 while 增量和评估之间的区别
- python - 获取包含具有相同名称但不同结尾的文件的元组列表
- android - java.lang.ArrayIndexOutOfBoundsException 错误 - 如何修复?
- c# - 属性中的局部函数是一个好主意还是表明该属性应该是它自己的方法?
- c# - 如何在第三张图像中合并两个不同的图像?
- python-3.x - For 循环打印 无
- html - 模板语言未使用 html 呈现
- javascript - 使用 {{Text}} 格式的 Javascript 拆分文本
- primeng - PrimeNG v5.2.4 p-table 全局过滤器不起作用