Angular使用@ngrx/store库创建MemoizedSelector记忆选择器 在Angular项目中,@ngrx/store库提供了一种高效的方式,用于从Redux风格的状态树中提取特定功能模块的状态。下面通过一段典型代码,展示如何创建记忆选择器(MemoizedSelector)。 i
Spartacus CMS Feature Selector实现解析
作者:技术拾光
时间:2026-06-11
浏览:502
文章目录
Angular使用@ngrx/store库创建MemoizedSelector记忆选择器
在Angular项目中,@ngrx/store库提供了一种高效的方式,用于从Redux风格的状态树中提取特定功能模块的状态。下面通过一段典型代码,展示如何创建记忆选择器(MemoizedSelector)。

import { createFeatureSelector, MemoizedSelector } from '@ngrx/store';
import { CmsState, CMS_FEATURE, StateWithCms } from '../cms-state';
export const getCmsState: MemoizedSelector =
createFeatureSelector(CMS_FEATURE);
这段代码虽然简短,但涵盖了Feature Selector、MemoizedSelector类型约束以及状态树层次结构等关键概念。逐行解析如下:
代码逐行解析
import { createFeatureSelector, MemoizedSelector } from '@ngrx/store';—— 从@ngrx/store包中导入两个核心工具:createFeatureSelector用于创建针对特定功能模块的选择器,MemoizedSelector作为泛型类型,用来声明选择器的类型签名。import { CmsState, CMS_FEATURE, StateWithCms } from '../cms-state';—— 从本地模块导入三个与CMS功能相关的类型或常量:CmsState描述CMS状态片段的结构,CMS_FEATURE是功能标识符,StateWithCms代表整个应用状态树的类型。export const getCmsState: MemoizedSelector—— 定义并导出常量= getCmsState,类型为MemoizedSelector,两个泛型参数分别表示全局状态类型(StateWithCms)和要提取的CMS状态类型(CmsState)。createFeatureSelector—— 调用(CMS_FEATURE); createFeatureSelector,传入CMS_FEATURE标识,生成专门用于选取CMS功能状态的选择器。显式指定CmsState类型保证了类型安全。
导入类型的作用
每个类型都有明确的角色:
CmsState—— 定义CMS功能模块下所有状态的具体结构,如页面信息、组件配置、导航数据等,需根据业务需求定义。CMS_FEATURE—— 常量(通常为字符串或枚举),用于在全局状态树中唯一标识CMS模块的键,例如'cms'。StateWithCms—— 应用状态树的顶层类型,通常是多个功能模块状态类型的联合或组合,告知选择器从哪个全局状态中寻找子状态。
调用createFeatureSelector时传入CMS_FEATURE,相当于指示Redux在全局状态树中找到键名为CMS_FEATURE的子对象并返回其值。最终导出的getCmsState是一个记忆化选择器,多次调用时仅在状态变动时重新计算,否则直接返回缓存结果,从而提升性能。
总结
本例清晰展示了如何利用@ngrx/store的createFeatureSelector方法构建类型安全的记忆选择器。通过指定泛型参数MemoizedSelector,既保证了选择器返回的数据类型正确,又借助记忆化特性优化了性能。这是Redux模式在大型Angular项目中的核心实践:将状态分模块管理,再通过专门的选择器高效读取所需片段。
实用工具推荐
电子包浆
使用 ›绿化、压缩、噪点和虚拟水印,自由调节做旧程度。
图片压缩
使用 ›选择画质和输出格式,预览压缩前后的大小。
相关文章