开发者社区> Java大神> 正文

使用 selector 从 SAP Spartacus state 里读取 Cart 数据

简介: 使用 selector 从 SAP Spartacus state 里读取 Cart 数据
+关注继续查看

选择器 selector 是用于获取存储状态 state 切片的纯函数。


@ngrx/store 提供了一些帮助函数来优化这个选择。 选择器在选择状态切片时提供了许多功能。


使用 createSelector 和 createFeatureSelector 函数时,@ngrx/store 会跟踪调用选择器函数的最新参数,在 ngrx-store.js 里完成。


因为选择器是纯函数,当参数匹配时可以返回最后一个结果,而无需重新调用选择器函数。这可以提供性能优势,特别是对于执行昂贵计算的选择器。这种做法被称为 memoization.


最佳实践:


设计一个 featureState 包含了具体的应用逻辑。使用 createSelector 工具函数创建 selector.


image.pngSpartacus 里有类似设计:image.png看个例子:image.png运行时:image.png第一层:entities

第二层:000001

第三层:error,loading,success,processesCount 和 value.

这个 state 的结构是在哪里定义的呢?

image.png在 feature 的 store 文件夹下。image.pngimage.pngProcessesLoaderState 提供了 processesCount 字段,它本身又是 LoaderState 类型:image.png因此也具有了 loading, error, success 和 value 四个字段:image.pngEntityState 接口,本身又提供了第一层的 entities 结构和第二层的 id 结构。image.png在我写下面这段高亮代码的上下文里,Cart 肯定已经可用了,因为它是在 LOAD_CART_SUCCESS 的回调里执行的。image.png单步调试:

先执行distinguished,再执行 map:

image.pngimage.pngimage.pngvalue 包含了所有的 state 数据:image.png直接从内存里返回上一次的 result:image.png强行在调试器里把值改了。image.png被迫重新执行 projectionFn:

image.png注意,这个强行改值需要进行两次。

首先获得 feature state:image.pngimage.pngimage.png再从 state 里将 carts 数据提取出来:image.png大功告成:image.png

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
使用Insert Select实现同时向多个表插入记录
使用Insert Select实现同时向多个表插入记录一、无条件 INSERT ALL-----------------------------------------------------...
576 0
MyBatisPlus中使用SELECT关联查询时未添加别名报异常的问题分析与修复
本文记录了在使用MyBatis表写入自定义的SQL查询语句时发生的异常问题。当定义使用include对主表中的字段进行包装时,在之后需要用到使用主表的关联查询,要将整个主表中include包装的字段都添加上别名,否则就会报错。本文记录在第一次使用MyBatisPlus框架时遇到的问题,是一次踩坑经验,希望帮助大家避免这样的坑。
219 0
【Flutter】Dart 数据类型 ( dynamic 数据类型 )
【Flutter】Dart 数据类型 ( dynamic 数据类型 )
25 0
【Flutter】Dart 数据类型 Map 类型 ( 创建 Map 集合 | 初始化 Map 集合 | 遍历 Map 集合 )
【Flutter】Dart 数据类型 Map 类型 ( 创建 Map 集合 | 初始化 Map 集合 | 遍历 Map 集合 )
48 0
Select Top在不同数据库中的使用
1. oracle数据库 SELECT * FROM TABLE1 WHERE ROWNUM
715 0
SAP Commerce Cloud WCMS 里的 home 页面和 SAP Spartacus Page API 返回的数据比较
SAP Commerce Cloud WCMS 里的 home 页面和 SAP Spartacus Page API 返回的数据比较
22 0
c++ GDI 中SelectObject使用方法和注意事项
介绍 CPen* SelectObject( CPen* pPen ); CBrush* SelectObject( CBrush* pBrush ); virtual CFont* SelectObject( CFont* pFont ); CBitmap* SelectObject( CBitmap* pBitmap ); int SelectObject( CRgn* pRgn ); CGdiObject* SelectObject( CGdiObject* pObject ); 函数功能:该函数选择一对象到指定的设备上下文环境中,该新对象替换先前的相同类型的对象。
1240 0
+关注
1789
文章
0
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载