以 CmsSetPageSuccessIndex 为例:

运行时该 Action 类蕴含三大字段:

(1) meta
(2) payload
(3) type

meta

meta 蕴含的 loader 字段和 meta 自身都是一个 object.

meta.entityId 和 entityType 是该 action payload 的标识位。

loader 表明该 entity 加载情况。

payload

蕴含的业务数据:

type

字符串类型。

从 上图 Prototype 能看出,CmsSetPageSuccessIndex 的原型链类为 EntitySuccessAction.

这一点也能从其实现代码看出:

export class CmsSetPageSuccessIndex extends StateUtils.EntitySuccessAction {  readonly type = CMS_SET_PAGE_SUCCESS_INDEX;  constructor(pageContext: PageContext, payload: Page) {    super(pageContext.type, pageContext.id, payload);  }}

查看 EntitySuccessAction 的实现:

属性1,meta 属性,定义在该类里。
属性2,payload,通过结构函数参数定义。
属性3,type,定义在上图81行,而后被 CmsSetPageSuccessIndex 重载。

EntitySuccessAction 构造函数接管三个参数:entityType,id 和 payload.

通过 entityType 和 id,生产出 meta 字段。

entitySuccessMeta 能够看成一个结构器或者工厂函数:

依据 entityType 和 id,生产出 EntityLoaderMeta, 后者是 EntityMeta 和 LoaderMeta 的联结。

export interface EntityMeta {  entityType: string;  entityId: string | string[];  entityRemove?: boolean;}export interface LoaderMeta {  entityType: string;  loader: {    load?: boolean;    error?: any;    success?: boolean;  };}

采纳三个点的语法,是因为这两个 interface,都有同名字段:entityType

LoaderMeta 的运行时数据,通过结构器 loadMeta 制作:

export function loadMeta(entityType: string): LoaderMeta {  return {    entityType: entityType,    loader: {      load: true,    },  };}

EntityMeta 字段的值,通过 entityMeta 结构:

export function entityMeta(type: string, id: string | string[]): EntityMeta {  return {    entityType: type,    entityId: id,  };}

运行时通过 PageEffect 从 Commerce Cloud 后盾读取 CMS 数据胜利后,新建 ActionClass,将负载通过结构函数参数传入。

更多Jerry的原创文章,尽在:"汪子熙":