Reselect
Reselect
这个库的功能挺强大的,源码超级短,看下源码好了。
defaultEqualityCheck
默认的相等检查,默认比较引用
areArgumentsShallowlyEqual
检查两次的参数是否相等,默认 foreach 对比引用
defaultMemoize
核心函数:比较前后两次的参数,如果相等,就返回上次的结果,并存新参数。否则计算新结果,存新参数。
getDependencies
拿到所有的依赖,就是最后的计算方法之前依赖的所有的结果
createSelectorCreator
先拿到 resultFunc,就是最后生成的函数
然后拿 dependencies,就是这个 selector 的输入依赖
memoizedResultFunc 就是将 resultFunc 变成缓存的,调用两次就会打到缓存
selector 就是算一下所有的参数的函数,然后调用 memoizedResultFunc。
createSelector
就是调用了 createSelectorCreator(defaultMemoize)
不足
reselect 只提供了一个缓存值,并没有多加一些 cache。从 issue 里面找到了一个解决方法。
很简单其实,就是加了个缓存,从最新往前遍历,找不到的话,就更新在最新的位置。
看下官方推荐的 re-reselect
这个等于就是加了 lodash 的 memorize,没什么意思,我需要提供自己的 key,太诡异了。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 981909093@qq.com
推荐文章
文章标题:Reselect
文章字数:303
本文作者:泽鹿
发布时间:2019-08-28, 16:45:23
最后更新:2019-08-28, 20:09:21
原始链接:http://panyifei.github.io/2019/08/28/前端技术/js/框架以及规范/Reselect源码/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。