DataSet 入门
上一章介绍 DataSet 是抽象的数据源仓库,类似于后端数据库中表的概念。
DataSet 中具有专门抽象 API 的相关体系,使用它并不需要针对现有的后端体系进行大幅改造,只需要针对后端接口,进行对应的编码即可。
本章结合接口数据,带大家创建一个简单的 DataSet 对象。
接口数据
后端有一套类似这样的数据结构,返回以下数据:
被托管在了这样一个接口地址上
DataSet 构造
分析接口信息,如果我们需要构建 DataSet 进行数据管理及使用 Pro 组件,可以这样写:
import { DataSet } from 'choerodon-ui/pro';
const userDS = new DataSet({
// 指定 DataSet 初始化后自动查询
autoQuery: true,
// 请求分页大小
pageSize: 8,
// 主键字段名,一般用作级联行表的查询字段
primaryKey: 'id',
// 对应后端接口,自动生成约定的 submitUrl, queryUrl...
name: 'user',
// 数据对象名,默认值 'rows'
dataKey: 'content',
// DataSet 中包含的字段,对应上述后端数据中每条记录中的字段
fields: [
{ name: 'id', type: 'number' },
{ name: 'name', type: 'string', label: '姓名' },
{ name: 'code', type: 'string', label: '编码' },
{ name: 'sex', type: 'string', label: '性别', lookupUrl: 'https://www.fastmock.site/mock/423302b318dd24f1712751d9bfc1cbbc/mock/EMPLOYEE_GENDER' },
{ name: 'active', label: '状态', type: 'boolean' },
],
// 接口自定义配置
transport: {
// 查询请求的 axios 配置或 url 字符串
read: {
url: 'https://www.fastmock.site/mock/423302b318dd24f1712751d9bfc1cbbc/mock/guide/user',
method: 'GET',
}
},
// DS 事件回调
events: {
load: ({ dataSet }) => {
console.log('加载完成', dataSet)
}
}
})
这样我们就创建好了一个基本的 DataSet 对象,以下对其配置中重点属性做解释说明。
更多配置 API 文档,参考 DataSet。
fields
fields,顾名思义,是类似于后端 SQL 数据表中的字段属性。这里负责的是将后端传回的数据收集进入 DataSet 中,将其变成 DataSet 可以监听到的数据。
fields 会是一个数组,因为一个接口的字段总是能对应多个的。内部的 name 负责标明需要收集并转换的字段名(对象中的 key),而 type 负责的是将收集到的信息进行对应的类型转换。
这样处理过的 DataSet(new 实例化后),就会将所有的后端数据对应转换成 DataSet 中存储的字段对象,同时利用观察者模式做到了视图与数据的同步更新。
transport
transport这个属性用于处理自定义接口,DataSet 为 RESTful 场景事先准备了 CRUD 方法,上例我们用到的是 read 方法,即读取方法,查询数据接口。
每个 transport 内部的方法均接收一个 AxiosConfig,这里我们用到的是 url 和 method。在接下来的章节中我们会详细介绍transport。
events
events是 DataSet 在完成一些操作后会调用的回调函数,例如 update 方法就会在 record 对象值更新后调用,这里我们观察的事件是 load - 数据加载完后事件。那么会在 read 方法执行完毕,并返回数据后触发,这里我们使用 console.log 打印加载完成,实际开发场景就可以在此事件中提前处理返回的数据,操作 DataSet 对象。
下一章节我们会利用本章创建的 DataSet 体验一下 Pro 开发 —— 最简 Table 实现。