组件 · 数据展示
DataList 数据列表
将筛选、列表数据、标题操作与分页组合在一起;筛选表单和列表内容由使用方渲染。
使用建议
- 避免:把 DataList 当成内置表格或 CRUD 页面
- 避免:假设 DataList.Filters 自动生成表单、按钮或折叠标题
- 避免:接口不分页且数据规模未知时直接全量加载
- 限制:source=all 的页面分页只限制挂载数量,不能减少接口响应体积;规模未知时须使用服务端有界查询或增量接口
- 限制:页面不分页且数据量大时,内容渲染器须采用虚拟化或其他有界渲染策略
- 限制:筛选表单自管字段时,调用 reset() 后仍需重置表单自身的值
引入
import {
DataList,
DataListContent,
DataListFilters,
DataListHeader,
DataListPagination,
useDataListContext,
// …共 7 个导出
} from '@selrux/ui/data-list';数据来源与展示模式
查询行为由 @selrux/headless/data-list 的 useDataListQuery 提供,UI 入口同步转发。先选接口形态 source,再选页面展示 view。request 接收筛选、页码、每页数量、游标和 AbortSignal;selectResult 从业务响应提取 items、total、hasMore 或 nextCursor。
- source=all + view=page:接口一次返回全部记录;本地先筛选、排序,再切片。切页不重新请求。
- source=all + view=continuous:页面不分页。大量记录须在 Content 中使用 Table.VirtualBody 或等价虚拟列表;DataList 不替业务选择行高与布局。
- source=page + view=page:服务端负责筛选与分页;返回 total 时使用页码,没有 total 时需返回 hasMore。
- source=page + view=continuous:逐页加载并追加,适合列表或卡片;数据持续增长时须考虑窗口化,或限制可累计的记录数。
- source=cursor:后续位置由 nextCursor 给出。页码界面只支持上一页、下一页,不展示不可达的页号。
DataList.Filters 不生成标题、表单、按钮或折叠交互。使用函数子节点取得 search(values)、reset 和 loading,自行组合 Form、Card 或 Collapsible;也可放自定义组件,通过 useDataListContext 读取列表操作。search() 提交当前 draftFilters,search(values) 直接提交表单值;reset() 恢复列表的 initialFilters,自管表单还需同步重置自己的字段。刷新会重取当前数据。
mapItem 是可选展示转换。复杂列表可传 renderContent 回调,或在 DataList.Content 中放独立组件并通过 useDataListContext 读取数据与操作。
演练场
调节下方可实现的字面量属性,实时预览真实组件。函数、Portal、样式逃生口等见代码演示与 API 表。
高级筛选
成员列表
代码演示
完整响应与页面分页
筛选和页码变化都在本地完成,列表接口只请求一次。
高级筛选
成员列表
服务端分页与标题栏内联筛选
每次切页请求对应页,工具栏可刷新。
远端成员
游标分页
仅提供可到达的上一页与下一页,不虚构总页数。
游标接口
连续加载卡片
远端分页逐批追加,列表区域的渲染逻辑由页面决定。
卡片列表
不分页的大数据
完整响应交给虚拟表体,只挂载视口附近的行。
完整响应 · 0 条
列表项转换
mapItem 只转换当前可见页,再交给自定义渲染。
转换后的列表项
空态与错误重试
切换模拟响应,展示 DataList.Content 的统一反馈。
结果状态
API
属性覆盖:示例用到 6 / 6 个自有属性(100%)
由 scripts/demo-coverage.mjs 统计,不含 className / style / 原生透传属性与纯转发事件。
DataList
DataList 组合入口;四个区域可按页面需要选用。
静态成员:DataList.Filters DataList.Header DataList.Content DataList.Pagination
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
controller * | - | DataListController<TItem, TFilters> | - |
renderContent | - | ((controller: DataListController<TItem, TFilters>) => ReactNode) | - |
另有 280 项原生属性与事件继承自 HTMLAttributes,原样透传。
DataListContent
列表区域统一反馈加载、失败和空态;内容由业务自定义渲染。
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
emptyText | - | string | - |
另有 280 项原生属性与事件继承自 HTMLAttributes,原样透传。
DataListFilters
DataList 筛选组合入口。
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
children * | 自定义内容,或接收筛选操作的渲染函数。 | ReactNode | ((actions: DataListFilterActions<TFilters>) => ReactNode) | - |
另有 279 项原生属性与事件继承自 HTMLAttributes,原样透传。
DataListHeader
标题栏为左侧标题或自定义内容、右侧业务工具提供稳定布局。
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
title | - | ReactNode | - |
actions | - | ReactNode | - |
另有 279 项原生属性与事件继承自 HTMLAttributes,原样透传。
DataListPagination
页码模式复用现有 Pagination;无总数或游标模式只开放可达的前后页。
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
hideOnSinglePage | - | boolean | - |
另有 280 项原生属性与事件继承自 HTMLAttributes,原样透传。
导出类型:DataListContentProps、DataListController、DataListFilterActions、DataListFiltersProps、DataListHeaderProps、DataListPaginationProps、DataListProps、DataListRequest、DataListResult、DataListSourceMode、DataListViewMode、UseDataListQueryOptions
函数与常量
| 名称 | 说明 | 签名 / 类型 |
|---|---|---|
useDataListContext | 在自定义工具栏、筛选项或列表组件中读取当前 DataList。 | <TItem = unknown, TFilters = unknown>() => DataListController<TItem, TFilters> |
useDataListQuery | 管理列表查询、竞态和页面展示状态;应用通过 request 接入自己的 service。 完整响应的页面分页只切片已加载数据,不会再次请求接口。 | <TRow, TFilters, TResponse, TItem = TRow>(options: UseDataListQueryOptions<TRow, TFilters, TResponse, TItem>) => DataListController<TItem, TFilters> |