前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SAP 电商云 Spartacus UI Store 相关的设计明细

SAP 电商云 Spartacus UI Store 相关的设计明细

作者头像
用户6256742
发布2024-06-01 10:22:12
1110
发布2024-06-01 10:22:12
举报
文章被收录于专栏:网络日志网络日志

Store

state.ts

定义了和 Site Context 业务相关的 State 数据模型。

定义数据模型的套路是:

代码语言:javascript
复制
export const SITE_CONTEXT_FEATURE = 'siteContext';

export interface StateWithSiteContext {
  [SITE_CONTEXT_FEATURE]: SiteContextState;
}

这是最顶层的 State 模型了。

SiteContextState 包含了三个子 State:

代码语言:javascript
复制
export interface SiteContextState {
  languages: LanguagesState;
  currencies: CurrenciesState;
  baseSite: BaseSiteState;
}

以 CurrenciesState 为例,不仅包含了 Entities 列表,还包含了当前 Active 状态的 Currency:

代码语言:javascript
复制
export interface CurrenciesState {
  entities: CurrencyEntities;
  activeCurrency: string;
}

再定义 Entities 列表:

代码语言:javascript
复制
export interface CurrencyEntities {
  [isocode: string]: Currency;
}

以上就是 Site Context 领域所需的 State 数据结构。

注意 SITE_CONTEXT_FEATURE 的使用场合,除了本文件定义 feature state 之外,还用在下列两个文件内:

SAP 电商云 Spartacus UI Store 相关的设计明细
SAP 电商云 Spartacus UI Store 相关的设计明细

场景1:用来创建 feature selector:

SAP 电商云 Spartacus UI Store 相关的设计明细
SAP 电商云 Spartacus UI Store 相关的设计明细

场景2:使用 StoreModule.forFeature 注册 store:

SAP 电商云 Spartacus UI Store 相关的设计明细
SAP 电商云 Spartacus UI Store 相关的设计明细

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

createFeatureSelector 是返回顶级(Top Level)的 Feature State的便捷方法。 它为状态的特征切片(Feature Slice)返回一个类型化(typed)的选择器函数。

注意 createFeatureSelector 的调用有两种写法。

写法1

下图 2 必须是 1 的一个切片,并且 3 的类型必须和 2 的类型一致:

SAP 电商云 Spartacus UI Store 相关的设计明细
SAP 电商云 Spartacus UI Store 相关的设计明细

2 的位置其实就是 result 的位置:

SAP 电商云 Spartacus UI Store 相关的设计明细
SAP 电商云 Spartacus UI Store 相关的设计明细

写法2

代码语言:javascript
复制
import { createSelector, createFeatureSelector } from '@ngrx/store';
 
export const featureKey = 'feature';
 
export interface FeatureState {
  counter: number;
}
 
export interface AppState {
  feature: FeatureState;
}
 
export const selectFeature = createFeatureSelector<AppState, FeatureState>(featureKey);
 
export const selectFeatureCount = createSelector(
  selectFeature,
  (state: FeatureState) => state.counter
);
SAP 电商云 Spartacus UI Store 相关的设计明细
SAP 电商云 Spartacus UI Store 相关的设计明细

我做过测试,在 SAP 电商云 Spartacus UI 项目里,两种写法完全等价:

SAP 电商云 Spartacus UI Store 相关的设计明细
SAP 电商云 Spartacus UI Store 相关的设计明细

可以顺利通过编译:

SAP 电商云 Spartacus UI Store 相关的设计明细
SAP 电商云 Spartacus UI Store 相关的设计明细
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-09-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Store
    • state.ts
    • 写法1
    • 写法2
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档