You're Invited: Meet the Socket team at BSidesSF and RSAC - April 27 - May 1.RSVP
Socket
Sign inDemoInstall
Socket

@aligov/components-use-form-table-hooks

Package Overview
Dependencies
Maintainers
15
Versions
13
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@aligov/components-use-form-table-hooks

a hooks for fusion table

1.4.4
latest
npm
Version published
Weekly downloads
13
-56.67%
Maintainers
15
Weekly downloads
 
Created
Source

@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表格每页条目数量Number10
options.initData用来给表单或其它查询相关参数设定默认值Object{}
options.waitUntilManualCall初始化后不自动查询,配合 hook 返回结果中的 readyToSearch 方法来使用,用于需要等待某些异步结果才能查询的场景Booleanfalse
options.trim是否在发送请求时,对请求参数中字符串类型的值做 trim 处理(仅第一层)Booleantrue
options.initSort初始化的表格排序设置,详见 Fusion 中 Table 的 sort 属性Object{}
options.sortFormatter排序参数发送请求前的格式化方案,默认是把所有对象放到 sortParams key 中(any) => anysortParams => ({ sortParams: sortParams })
options.initFilterParams初始化时的表格过滤设置,详见 Fusion 中 Table 的 filterParams 属性Object{}
options.filterFormatter表格过滤参数发送请求前的格式化方案,默认是把所有对象放到 filterParams key 中(any) => anyfilterParams => ({ filterParams: filterParams })

返回结果

返回结果是一个对象,包含以下属性

属性说明类型
loading是否正在请求中Boolean
formDataform 表单参数,包含了 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
sortParamsTable 的 sort 属性Object
onSortTable 的 onSort 属性(dataIndex: string, order: string) => void
filterParamsTable 的 filterParams 属性Object
onFilterTable 的 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,而是数组。这个时候则需要根据实际的数据结构来展示。

Keywords

ice

FAQs

Package last updated on 15 Sep 2020

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts