reactjs - "Reselect"VS "Memoize-One"与 "React and Redux"

标签 reactjs redux react-redux memoization reselect

我正在尝试在 React 工作流程中使用某种内存功能,并且我正在寻找最好且最重要的“最简单” 解决方案来与我的工作流程集成,其中包括React 和 Redux.

我遇到了很多关于记忆化的文章,其中一些展示了“memoize-one”的用法,并将其视为最快、最容易启动和运行的方法,而其他人甚至没有提及它并谈论“重新选择”。

我只是想知道哪个更好、最简单,以及我应该投资哪个。

最佳答案

两个返回一个函数,该函数接受给定数量的参数返回一个值:

getA(arg1, arg2, arg3) // Returns a value

区别在于调用函数时幕后发生的事情。

内存一

  • 收集提供的参数
  • 将参数与之前调用中提供的参数进行比较 (===)
  • 参数相同:返回缓存结果
  • 参数不相同:重新计算结果函数并返回

重新选择

  • 收集提供的参数
  • 运行一组inputSelectors函数,为它们提供收集到的参数
  • 收集inputSelectors返回值
  • inputSelectors 返回值与之前调用中获取的值进行比较 (===)
  • 相同:返回缓存结果
  • 不相同:重新评估结果函数并返回

结论

memoize-one 是一个基于值的内存实用程序:内存是对提供的参数的值执行的。

reselect 在其之上添加了一个进一步的评估层:内存不是对参数值执行的,而是对一组inputSelectors<的结果执行的 函数使用这些初始参数。

这意味着reselect选择器很容易组合,因为每个inputSelectors都可以是另一个reselect选择器。

关于reactjs - "Reselect"VS "Memoize-One"与 "React and Redux",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52810771/

相关文章:

javascript - 如何在不使用 Flux 的情况下将状态从深层节点传播到嵌套树的根?

reactjs - 为什么重新渲染后样式仍然保留?

javascript - onClick 删除边框并在下一次单击时再次添加它们 CSS,Preact

javascript - 我的演示组件的 return 语句内的 if 语句引发意外的标记错误

react-native - 当 native 应用程序启动时,将初始状态从 API 调用传递到 createStore

javascript - react-chartjs 饼图不呈现

reactjs - 当 redux 存储的非相关部分在 react-redux 中更新时组件重新渲染

redux - Dart/Flutter - 从回调函数中产生

python - Django Rest Framework DELETE 在正文中不返回任何内容

javascript - 如何通过单击按钮从 TextFields 和 Select 中获取值?