页面组件常用的内部数据组织方式
对于需要从后端加载数据并展示的组件, 个人习惯将内部的数据以如下结构储存:
/**
* 分页数据
*/
interface PageEntity<TypeData> {
countPage: number;
countRecord: number;
pageIndex: number;
pageSize: number;
records: TypeData[];
hasNextPage: boolean;
hasPrevPage: boolean;
}
/**
* 组件状态
*/
type ComponentStatus = 'unloaded' | 'loading' | 'loaded' | 'failed' | 'loading-more'
/**
* 组件数据
*/
interface ComponentData<TypeData>
{
data: PageEntity<TypeData>;
status: ComponentStatus;
error: any;
}
对于组件状态 status
的描述如下:
unloaded
组件初始化并挂载到 DOM 树之前, 内部数据的初始状态. 理论上用户看不到这个状态的控件, 因为控件在控件被挂载的时候已经开始执行数据加载loading
组件处于初次加载数据的过程. 此时组件没有可供展示的数据, 页面一般只会显示一个 "数据加载中"loaded
组件完成数据加载. 组件开始正常对外展示分页数据loading-more
组件正在加载更多分页数据. 已有的数据正常展示, 但是在列表顶部或底部需要显示一个 "数据加载中"failed
组件在加载数据的过程中遇到错误
graph TD;
SA(组件未挂载);
SB(组件挂载);
NA[unloaded];
NB[loading];
NC[loaded];
ND[loading-more];
NF[failed];
SA --> NA;
NA --> SB;
SB --> NB;
NB --> NC;
NB --> NF;
NC --> ND;
ND --> NC;