@aligov/components-use-form-table-hooks
v1.4.4
Published
a hooks for fusion table
Downloads
74
Readme
@aligov/components-use-form-table-hooks
搭配基于fusion封装的GovTable使用。
tnpm i @aligov/components-use-form-table-hooks -S
基础用法
下面是场景的列表查询的例子,由 form + table + 分页组成
import React from 'react';
import { Pagination } from '@alifd/next';
import { Field, FormButtonGroup, Reset, SchemaForm, Submit } from '@uform/next';
import GovTable from '@aligov/components-gov-table';
import useFormTableHooks from '@aligov/components-use-form-table-hooks';
async function getData(params) {
return await {
total: 1000,
list: [
{id: 1, content: 'a'},
{id: 2, content: 'b'}
]
};
}
function Page() {
const {
loading, // 是否为加载状态
data = {}, // 当前列表数据
search, // 表单搜索触发提交
reload, // 重新搜索,用于操作后更新列表场景
changeTable, // 表格翻页接口
} = useFormTableHooks(getData);
const columns = [
{
title: 'ID',
dataIndex: 'id',
},
{
title: 'Content',
dataIndex: 'content'
}
];
const { list, total = 0, current = 1, pageSize = 10 } = data;
return (
<div>
<SchemaForm
labelCol={6}
wrapperCol={18}
autoAddColon={false}
onSubmit={search}
>
<Field name="id" type="string"/>
<FormButtonGroup>
<Submit>查询</Submit>
<Reset>重置</Reset>
</FormButtonGroup>
</SchemaForm>
<GovTable loading={loading} dataSource={list} columns={columns} hasBorder={false} />
<Pagination
onChange={changeTable}
current={current}
total={total}
pageSize={pageSize}
/>
</div>
);
}
API
const hookExport = useFormTableHooks(searchService, options);
参数
| 参数 | 说明 | 类型 | 默认值 |
|-----------------------------|---------------------------------------------------------------------------------------------------------------|-----------------------|----------------------------------------------------|
| searchService | 必须,根据表单及分页参数来查询列表内容 | (any) => Promise | |
| options | 可选,定制处理 | Object | {}
|
| options.defaultPageSize | 表格每页条目数量 | Number | 10 |
| options.initData | 用来给表单或其它查询相关参数设定默认值 | Object | {}
|
| options.waitUntilManualCall | 初始化后不自动查询,配合 hook 返回结果中的 readyToSearch
方法来使用,用于需要等待某些异步结果才能查询的场景 | Boolean | false |
| options.trim | 是否在发送请求时,对请求参数中字符串类型的值做 trim 处理(仅第一层) | Boolean | true |
| options.initSort | 初始化的表格排序设置,详见 Fusion 中 Table 的 sort 属性 | Object | {}
|
| options.sortFormatter | 排序参数发送请求前的格式化方案,默认是把所有对象放到 sortParams
key 中 | (any) => any | sortParams => ({ sortParams: sortParams })
|
| options.initFilterParams | 初始化时的表格过滤设置,详见 Fusion 中 Table 的 filterParams 属性 | Object | {}
|
| options.filterFormatter | 表格过滤参数发送请求前的格式化方案,默认是把所有对象放到 filterParams
key 中 | (any) => any | filterParams => ({ filterParams: filterParams })
|
返回结果
返回结果是一个对象,包含以下属性
| 属性 | 说明 | 类型 |
|-----------------|------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------|
| loading | 是否正在请求中 | Boolean |
| formData | form 表单参数,包含了 options.initData
中的内容 | Object |
| data | 列表数据,主要是 searchService
的返回结果 | any |
| search | 触发表单查询,会重置页码为 1。可携带额外的参数来查询 | (extraParams?: object} => void |
| reload | 刷新当前页,常用于表格操作后刷新的场景,可携带额外的参数来表示可能移除的数量,用于避免最后一页条目都不再展示后页码不对的场景 | (deleteCount: Number = 0) => void |
| changeTable | 表格翻页,主要用于 Fusion Pagination 组件的 onChange 属性 | (current: number) => void |
| readyToSearch | 调用后解除 options.waitUntilManualCall
的控制,触发表单查询及后续的响应 | Function |
| updateFormData | 更新表单数据,但不触发查询,不常用 | (data: Object) => void |
| updateTableData | 直接更新列表数据,主要用于操作后不发送请求来完全刷新列表的场景,不常用 | (tableData: any) => void |
| updateTableRow | 直接更新列表某行数据,不常用 | (index: number, rowData: any) => void |
| sortParams | Table 的 sort 属性 | Object |
| onSort | Table 的 onSort 属性 | (dataIndex: string, order: string) => void |
| filterParams | Table 的 filterParams 属性 | Object |
| onFilter | Table 的 onFilter 属性 | (filterParams: Object) => void |
相关信息
初始化时不马上发请求
默认情况下,在调用 hooks 时就会马上调用 searchService 来获取数据。但如果需要先获取某些异步数据(如表单某些地方需要通过异步来获取并设置默认值),那么可通过 options.waitUntilManualCall
以及返回的 readyToSearch
来搭配使用。
例子:
const { readyToSearch, updateFormData } = useFormTableHooks(searchService, { waitUntilManualCall: true });
asyncFn().then((res = {}) => {
updateFormData(res);
readyToSearch();
});
请求和分页
searchService
一般应该满足前后端接口规范中的[列表类接口][guide-ajax-list]的约定里的 data
格式(注意:后端接口本身应满足完全的结构,但经通用请求库包装后,service 只会返回接口里的有效数据 data
), 即假设是分页的场景。
但如果接口本身不满足通用的列表查询规范,而是直接返回一个数组。那么 hook 返回结果种的 data
将不是一个 object,而是数组。这个时候则需要根据实际的数据结构来展示。