NgRx Store createSelector 的单步调试和源代码分析

简介: NgRx Store createSelector 的单步调试和源代码分析

源代码:image.png

createSelector 内部:image.png

defaultMemoize 返回一个对象,每个字段指向一个函数:

image.pngimage.pngimage.png


输入参数我传入了三个纯函数,即没有 side effect,可以重复执行的函数。这三个纯函数被维护到了一个数组内:


image.png


进入到 createSelectorFactory 返回的函数体内部:


image.png


从源代码可以看出,createSelector接收的可变数目的参数,最后一个被当成 projector 看待,其余均视作 selector.


image.png


分下列几种情况讨论:


(1) 第一次执行,lastArguments undefined, 进入该 IF 分支,执行 projection,将结果保存,并返回。

(2) 如果是重复执行,且输入参数没有变化,则直接返回上一次执行的结果

(3) 执行到这里,说明是重复执行,且参数发生了变化,则重新执行 projection

(4) 如果再次执行和前次执行的结果相同,返回前次结果


image.png


createSelector 最终返回的,是带有记忆功能的 selector:

image.png


以后如若要调试,记住代码的大概位置在 970,搜索关键字 memoized.


相关文章
|
6月前
|
存储
SAP UI5 BaseObject.extend 方法的单步调试
SAP UI5 BaseObject.extend 方法的单步调试
42 0
|
6月前
|
存储
SAP UI5 setProperty 的执行逻辑单步调式和分析
SAP UI5 setProperty 的执行逻辑单步调式和分析
46 0
|
6月前
|
Web App开发 开发者
SAP UI5 框架是如何执行 batch 请求的单步调试
SAP UI5 框架是如何执行 batch 请求的单步调试
37 0
|
API
LyScript 实现Hook隐藏调试器
LyScript 插件集成的内置API函数可灵活的实现绕过各类反调试保护机制,前段时间发布的那一篇文章并没有详细讲解各类反调试机制的绕过措施,本次将补充这方面的知识点,运用LyScript实现绕过大多数通用调试机制,实现隐藏调试器的目的。
57 0
LyScript 实现Hook隐藏调试器
NgRx Store createSelector 的单步调试和源代码分析
NgRx Store createSelector 的单步调试和源代码分析
73 0
NgRx Store createSelector 的单步调试和源代码分析
|
缓存
单步调试学习NgRx createSelector 工具函数的使用方式
单步调试学习NgRx createSelector 工具函数的使用方式
254 0
单步调试学习NgRx createSelector 工具函数的使用方式
|
缓存
NgRx Store createSelector 返回的 selector 执行取数逻辑的单步调试
NgRx Store createSelector 返回的 selector 执行取数逻辑的单步调试
105 0
NgRx Store createSelector 返回的 selector 执行取数逻辑的单步调试
一个基于ngrx的计数器例子 单步调试搞清楚原理
一个基于ngrx的计数器例子 单步调试搞清楚原理
一个基于ngrx的计数器例子 单步调试搞清楚原理
fixture.detectChange开始单步调试,如何执行到Directive的ngAfterViewInit钩子
fixture.detectChange开始单步调试,如何执行到Directive的ngAfterViewInit钩子
fixture.detectChange开始单步调试,如何执行到Directive的ngAfterViewInit钩子