1.4.0-beta.0 • Published 2 years ago

table-render v1.4.0-beta.0

Weekly downloads
515
License
MIT
Repository
-
Last release
2 years ago

易用且轻量的中后台列表解决方案,常用于搜索列表页快速生成

官网

https://xrender.fun/table-render

优势

  1. 真正开箱即用:以最简单的 API 配置请求和表头的字段,就能生成一个好用搜索列表。
  2. XRender 生态:搜索筛选能力用 FormRender 来提供,以最小成本快速生成上侧搜索面板。
  3. 无缝习惯使用:表格能用 Ant Design Table 来提供,降低用户使用成本。

何时使用

  1. 用于查看和处理多条结构类似的数据,可对数据进行排序、筛选、对比或其他自定义操作,常有导航到详情页面的作用。
  2. 表格列表建议将重要信息和操作展示出来,不重要信息直接收起,可以帮助用户更高效的查看、处理、查找数据。

如何使用

安装

table-render 依赖 ant design,单独使用不要忘记安装~

npm i table-render --save

代码演示

import React from 'react';
import { Table, Search, withTable } from 'table-render';

const dataSource = [];
for (let i = 0; i < 6; i++) {
  dataSource.push({
    id: i.toString(),
    title: `标题${i + 1}`,
    created_at: new Date().getTime(),
  });
}

// 详细可见 form-render 的使用
const schema = {
  type: 'object',
  properties: {
    title: {
      title: '标题',
      type: 'string',
      'ui:width': '30%',
    },
    created_at: {
      title: '创建时间',
      type: 'string',
      format: 'date',
      'ui:width': '30%',
    },
  },
};

// 配置完全透传 antd table
const columns = [
  {
    title: '标题',
    dataIndex: 'title',
  },
  {
    title: '创建时间',
    key: 'since',
    dataIndex: 'created_at',
    valueType: 'date',
  },
  {
    title: '操作',
    render: (row, record) => <a onClick={() => alert(row.title)}>编辑</a>,
  },
];

const Wrapper = () => {
  const searchApi = () => {
    return {
      rows: dataSource,
      total: dataSource.length,
    };
  };
  return (
    <>
      <Search schema={schema} api={searchApi} />
      <Table headerTitle="最简表格" columns={columns} rowKey="id" />
    </>
  );
};

export default withTable(Wrapper);

API

<TableProvider> 参数

TableProvider 本质就是一个 React Context,将对应的 <Search><Table> 包裹起来,可以很方便在里面插入一些其他东西,不需要任何入参

<Search> 参数

我们将搜索相关的能力放到 <Search> 上面配置,包括对应的搜索筛选表单的渲染

属性描述类型默认值必填
schema用于渲染表单的 schema,具体的 api 参考 form-render 文档object-
api初始化&点击查询时执行的函数Function or Array-
onSearch在表格查询时执行一些额外的操作Function-
afterSearch在表格查询结束后执行一些额外的操作Function-
searchOnMount组件初次挂载时,是否默认执行查询动作booleantrue
hidden是否隐藏<Search />组件booleanfalse
searchBtnRender自定义表单查询按钮(refresh,clearSearch) => ReactNode[]-
searchBtnStyle自定义表单操作按钮组的样式React.CSSProperties{}
searchBtnClassName自定义表单操作按钮组的 ClassNamestring''
searchText自定义查询按钮的文本string'查询'
resetText自定义重置按钮的文本string'重置'
debug开启 debug 模式,时时显示内部状态,开发的时候强烈建议打开booleanfalse

<Table> 参数

支持所有 antd table 的 props,但是dataSource, loading, pagination这几个参数是内部状态,不需要填写,最基本的使用就需要填写columns

属性描述类型默认值
headerTitle表格标题stringReactNode-
toolbarRender表格主体右上方的控件,例如“添加”按钮() => ReactNode[]false
toolbarAction显示在表格主体右上方的 Icon 列表,内置了刷新、调整密度、全屏显示 等功能booleanfalse
pageChangeWithRequest切换分页时是否需要请求接口booleantrue
columns列定义objectfalse

<Table> 参数 中 Columns 列定义

columns 为 antd 已有的 props,所以支持 antd 所有的支持的 columns 的配置,同时也提供了一些更方便的 api,加快书写

属性描述类型默认值
ellipsis是否自动缩略boolean-
copyable是否支持复制boolean-
valueType值的类型,详见下方 valueType 配置stringtext | money | date | dateTimetext
enum当前列值的枚举,详见高级用法object-
  • valueType 值类型:TableRender 封装了一些常用的值类型来减少重复的 render 操作,配置一个 valueType 即可展示格式化响应的数据,具体使用可参考 案例代码

    属性描述
    text普通的文本类型
    date当数据是日期类型的返回时,会自动将格式转换为 '2020-10-20'
    dateTime当数据是日期类型的返回时,会自动将格式转换为 '2020-10-20 19:30:00'
    money当数据是金额时,会自动将格式转换为 '¥999,999,999.99'

Context 上下文

可通过 useTable 获取 table-render 的 context,例如: refreshtableStatesetTable 等属性

属性描述类型
tableState这些是全局的状态,根据需要使用object
refresh刷新表格数据function
clearSearch重置筛选项function
setTable用于修改全局状态的工具函数,setTable 之于 tableState,等同 setState 之于 statefunction
changeTab手动切换 tab 的函数,例如目前两个搜索 tab: “我的活动”,“全部活动” (分别对应 tab 值为 0 和 1)function
  • 导出 useTable 以及对应的方法

    import { useTable } from 'table-render';
    const { refresh, tableState, setTable } = useTable();
  • 其中 tableState 的数据格式如下:

    {
      loading: false, // 表单是否在加载中
      search: {}, // 选项数据
      searchApi // 搜索用的api
      tab: 0, // 如果searchApi是数组,需要在最顶层感知tab,来知道到底点击搜索调用的是啥api
      dataSource: [], // 表格的数据
      extraData: { ... }, // 自定义的扩展星系
      pagination: {
        current: 1,
        pageSize: 10,
        total: 100,
      },
    }
  • refresh 用法

    入参类型说明
    stayboolean刷新是否保留在现在的页码上,默认 false,回到第一页
    tabnumber0,1,2.. 如果 searchApi 是数组会出现的搜索选择 tab,用于强制搜索某个 tab,不常用
    1. 直接用:refresh()
    2. 刷新数据,但停留在现有的页码:refresh({ stay: true })
  • changeTab 用法

    //以下代码将手动切换到“全部活动”(tab = 1)
    const { changeTab } = useTable();
    //...
    const onClick = () => {
      changeTab(1);
    };
2.1.4

1 year ago

1.3.15

1 year ago

2.1.3-beta.5

2 years ago

2.1.3-beta.6

2 years ago

2.1.3-beta.4

2 years ago

2.1.3

2 years ago

2.1.3-beta.1

2 years ago

2.1.3-beta.2

2 years ago

2.0.16-beta.1

2 years ago

2.1.2-beta.1

2 years ago

2.1.0-beta.1

2 years ago

2.1.2-beta.2

2 years ago

1.3.14-beta.1

2 years ago

1.3.14

2 years ago

2.1.2

2 years ago

2.1.1

2 years ago

2.0.16

2 years ago

2.1.0

2 years ago

2.0.19

2 years ago

2.0.17

2 years ago

2.0.18

2 years ago

2.0.7-beta.1

2 years ago

2.0.7-beta.2

2 years ago

2.0.7-beta.3

2 years ago

2.0.3

2 years ago

2.0.0-alpha.3

2 years ago

2.0.2

2 years ago

2.0.0-alpha.4

2 years ago

2.0.5

2 years ago

2.0.4

2 years ago

2.0.7

2 years ago

2.0.9

2 years ago

2.0.8

2 years ago

2.0.0-alpha.2

2 years ago

2.0.1

2 years ago

2.0.0

2 years ago

2.0.13-beta.3

2 years ago

2.0.13-beta.2

2 years ago

2.0.4-beta.1

2 years ago

1.3.13-beta.1

2 years ago

1.3.13-beta.2

2 years ago

1.3.13-beta.3

2 years ago

1.3.13-beta.4

2 years ago

1.3.13-beta.5

2 years ago

1.3.11-beta.1

2 years ago

2.0.9-beta.0

2 years ago

1.3.13

2 years ago

1.3.11

2 years ago

1.3.12

2 years ago

2.0.15-beta.1

2 years ago

2.0.11-beta.2

2 years ago

2.0.15-beta.2

2 years ago

2.0.11-beta.1

2 years ago

2.0.15

2 years ago

2.0.13

2 years ago

2.0.14

2 years ago

2.0.11

2 years ago

2.0.12

2 years ago

2.0.10

2 years ago

1.3.9

3 years ago

1.3.11-beta.0

2 years ago

1.3.10

3 years ago

1.4.0-beta.0

2 years ago

2.0.0-rc.0

2 years ago

2.0.0-rc.1

2 years ago

1.3.8-beta.0

3 years ago

1.3.8

3 years ago

1.3.7

3 years ago

1.3.6

3 years ago

1.3.5

3 years ago

1.3.4

3 years ago

1.3.3

3 years ago

1.3.2

3 years ago

1.3.1

3 years ago

1.2.8

3 years ago

1.2.8-beta.1

3 years ago

1.2.7

3 years ago

1.3.0

3 years ago

1.2.6

3 years ago

1.2.5

3 years ago

1.2.4

3 years ago

1.2.0

3 years ago

1.2.3

3 years ago

1.2.2

3 years ago

1.2.1

3 years ago

1.1.9

3 years ago

1.1.8

3 years ago

1.1.7

4 years ago

1.1.6

4 years ago

1.1.5

4 years ago

1.1.4

4 years ago

1.1.3

4 years ago

1.1.1

4 years ago

1.1.2

4 years ago

1.0.5

4 years ago

1.1.0

4 years ago

1.0.4

4 years ago

1.0.2

4 years ago

1.0.3

4 years ago

1.0.1

4 years ago

1.0.0

4 years ago

0.8.22

4 years ago

0.8.21

4 years ago

0.8.20

4 years ago

0.8.19

4 years ago

0.8.18

4 years ago

0.8.17

4 years ago

0.8.16

4 years ago

0.8.15

4 years ago

0.8.14

4 years ago

0.8.12

4 years ago

0.8.11

4 years ago

0.8.13

4 years ago

0.8.10

4 years ago

0.8.9

4 years ago

0.8.8

4 years ago

0.8.7

4 years ago

0.8.6

4 years ago

0.8.5

4 years ago

0.8.4

4 years ago

0.8.1

4 years ago

0.8.3

4 years ago

0.8.2

4 years ago

0.8.0

4 years ago

0.7.5

4 years ago

0.7.4

4 years ago

0.7.3

4 years ago

0.7.2

4 years ago

0.7.1

4 years ago

0.7.0

4 years ago

0.6.2

4 years ago

0.6.1

4 years ago

0.6.0

4 years ago

0.5.4

4 years ago

0.5.3

4 years ago

0.5.2

4 years ago

0.5.1

4 years ago

0.5.0

4 years ago

0.4.0

4 years ago

0.3.0

4 years ago

0.2.0

4 years ago

0.1.73

4 years ago

0.1.71

4 years ago

0.1.72

4 years ago

0.1.7

4 years ago

0.1.61

4 years ago

0.1.62

4 years ago

0.1.6

4 years ago

0.1.5

4 years ago

0.1.41

4 years ago

0.1.31

4 years ago

0.1.4

4 years ago

0.1.3

4 years ago

0.1.2

4 years ago

0.1.1

5 years ago

0.1.0

5 years ago