reactjs - "Reselect" VS "Memoize-One" with "React and Redux"
问题描述
我试图在我的 React 工作流程中使用某种记忆,我正在寻找最好的,最重要的是“最简单”的解决方案来与我的工作流程集成,包括React and Redux
.
我遇到了很多关于一般记忆化的文章,有些文章展示了“memoize-one”的使用,并将其作为最快和最容易启动和运行的支持,而其他人甚至没有提到它并谈论“重新选择” .
我只想知道哪个更好,最简单,我应该投资哪个。
解决方案
两个库都返回一个函数,该函数接受给定数量的参数并返回一个值:
getA(arg1, arg2, arg3) // Returns a value
不同之处在于函数被调用时的底层发生了什么。
memoize-one
- 收集提供的参数
- 将参数与之前调用 (
===
)中提供的参数进行比较 - 参数相同:返回缓存结果
- 参数不相同:重新评估结果函数并返回
重新选择
- 收集提供的参数
- 运行一组
inputSelectors
函数,为他们提供收集的参数 - 收集
inputSelectors
返回值 - 将
inputSelectors
返回值与之前调用中获得的值进行比较 (===
) - 值相同:返回缓存结果
- 值不一样:重新评估结果函数并返回
结论
memoize-one
是一个基于值的 memoize 实用程序:memoization在提供的 arguments的值上执行。
reselect
在其之上添加了一个进一步的评估层:记忆不是对参数值执行,而是对一组inputSelectors
函数的结果执行这些初始参数。
这意味着reselect
选择器很容易组合,因为每个选择器都inputSelectors
可以是另一个reselect
选择器。
推荐阅读
- jwt - 如何从 base64 结束字符串创建 Java Key 对象,以便使用 JJWT 进行 PS256 解析
- spring-boot - Spring将保存到数据库与另一个实例同步
- java - 如何将成员添加到数组列表的后面或前面
- java - 将日期格式转换为 excel 友好格式,然后对其进行解析以转换日期
- sql - 如何将行名更新为 SQL 中两个表之间的列名
- html - 每次单击显示列按钮后,表格列的宽度都会增加
- javascript - 在单击按钮上打开当前手风琴,关闭其他使用 jqwery 动态打开的手风琴
- angular - 扫描后如何返回带有插入项的更新数组?
- java - 两个不同的查询返回相同的对象 Spring Boot JPA
- python - 在两个日期时间之间选择 xarray 数据集数据超出范围