ProTab(高级表格)的使用
一、 params 和 request 属性的使用
例子如下:
import React, { useState } from 'react';
import { ProTable } from '@ant-design/pro-table';
const columns = [
{
title: '姓名',
dataIndex: 'name',
},
{
title: '年龄',
dataIndex: 'age',
sorter: true,
},
{
title: '地址',
dataIndex: 'address',
},
];
const DemoTable = () => {
const [params, setParams] = useState({ current: 1, pageSize: 20 });
const fetchData = async (params) => {
const { current, pageSize, sorter } = params;
const response = await fetch(`/api/data?current=${current}&pageSize=${pageSize}&sorter=${sorter}`);
const data = await response.json();
return {
data: data.list,
total: data.total,
success: true,
};
};
return (
<ProTable
request={fetchData}
params={params}
onParamsChange={setParams}
columns={columns}
/>
);
};
在这个示例中,定义了一个表格组件DemoTable,其中包含了一个ProTable组件。ProTable组件的request属性和params属性分别指定了数据请求的回调函数和请求参数,用于向服务端获取表格数据。onParamsChange属性则指定了params状态的更新函数,用于在用户翻页或者修改每页展示数量时,更新请求参数并重新渲染表格。
在fetchData函数中,使用params对象中的属性来构造请求参数,并通过fetch函数向服务端发送请求。服务端返回的数据包括了表格数据和总条数等信息。在函数返回时,需要将数据结构转换为ProTable组件所需的格式,即包含了data、total和success三个属性的对象。
二、ProTable 的练习
import React, { useState, useRef } from 'react';
import ProTable from '@ant-design/pro-table';
import { ProForm, ProFormText } from '@ant-design/pro-form';
import './index.less';
import { getConfigList } from '@/services/@xzfy/config';
import { Drawer, Button, message } from 'antd';
import { PlusCircleOutlined } from '@ant-design/icons';
import { WaterMark } from '@ant-design/pro-layout';
import { tableColums } from './tableColumns';
import AddOrEdit from '../SystemManagement/dictManagement/addOrEdit';
export default function index() {
// 获取表单元素
const form = useRef();
// 控制抽屉的开关
const [open, setOpen] = useState(false);
//
const [currRecord,setCurrRecord] = useState(null);
// 定义抽屉标题
const [title, setTitle] = useState();
// 点击“ 编辑 ”按钮获取该行的数据
const [currentRow, setCurrentRow] = useState();
// 定义表格列
const columns = [
...tableColums,
{
title: '操作',
valueType: 'option',
align: 'center',
width: 100,
render: (_, record) => {
return [
<a
key="edit"
onClick={() => {
console.log(record);
setCurrentRow(record);
setTitle('编辑');
setOpen(true);
}}
>
编辑
</a>,
];
},
},
];
// 点击“ 新增 ” 按钮后
const add = () => {
setTitle('新增');
// setCurrRecord()
setOpen(true);
};
// 关闭抽屉
const drawerClose = () => {
setOpen(false);
setCurrentRow(null);
};
// 表单重置
const FormReset = () => {
// 不能用这个的方式原因是CurrentRow被设置成表单的初始值,第一次点击重置的时候,会后退到初始化值的状态,然后第二次点击的时候才可以把初始值变为undefined
// setCurrentRow(undefined);
form.current.setFieldsValue({
configKey: '',
configValue: '',
configDesc: '',
});
};
// 表单提交
const FormFinish = () => {
if (title == '编辑') {
message.success('编辑成功!');
setOpen(false);
} else if (title == '新增') {
message.success('新增成功!');
setOpen(false);
}
};
return (
<div className="tabBox">
<WaterMark content="大美女">
<ProTable
// options={false} // 用于配置表格的一些基本选项。这个属性可以设置为一个对象,包含多个选项,用于控制表格的分页、密度、搜索、导出等功能。
rowKey="id"
request={getConfigList} // 需要获取数据时,会调用"request"属性所指定的函数,并将当前的查询参数、排序规则、过滤条件等信息作为参数传递给这个函数。这个函数需要返回一个Promise对象,表示异步操作的结果。当ProTable组件获取到异步操作的结果后,会自动更新表格的数据源,并重新渲染表格。
columns={columns} // 定义表格的列信息。
cardBordered={false} // 在表格外部添加一个带边框的卡片容器
pagination={{ pageSize: 5 }} // 用于配置分页功能的相关参数,包括当前页码、每页显示的数据条数、总数据条数等
toolBarRender={() => (
<Button type="primary" shape="round" icon={<PlusCircleOutlined />} onClick={add}>
新增
</Button>
)} // 用于自定义表格工具栏的渲染内容。这个属性接受一个函数作为参数,用于渲染工具栏的内容。
/>
{open?<AddOrEdit visible={open} record={ currRecord} />:''}
<Drawer
destroyOnClose // 用于控制弹窗是否在关闭时销毁组件实例。
title={title}
placement="right"
onClose={drawerClose}
open={open}
>
<ProForm
initialValues={currentRow}
formRef={form}
onReset={FormReset}
onFinish={FormFinish}
>
<ProFormText
width="md"
name="configKey"
label="配置键"
placeholder="请输入配置键"
rules={[{ required: true }]} // 必填项
/>
<ProFormText
width="md"
name="configValue"
label="配置值"
placeholder="请输入配置值"
rules={[{ required: true }]}
/>
<ProFormText
width="md"
name="configDesc"
label="配置描述"
placeholder="请输入配置描述"
rules={[{ required: true }]}
/>
</ProForm>
</Drawer>
</WaterMark>
</div>
);
}
运行结果:

三、表格的数据换行
示例图:

分析:
利用 render 属性来实现换行的效果
代码如下:
const data = [
{ id: 1, isSigning: '签约状态1',stateYw:0, belongingArea: '区域1', orgName: '机构1' },
{ id: 2, isSigning: '签约状态2',stateYw:1, belongingArea: '区域2', orgName: '机构2' },
{ id: 3, isSigning: '签约状态3',stateYw:0, belongingArea: '区域3', orgName: '机构3' },
{ id: 4, isSigning: '签约状态4',stateYw:1, belongingArea: '区域4', orgName: '机构4' },
{ id: 5, isSigning: '签约状态5',stateYw:0, belongingArea: '区域5', orgName: '机构5' },
];
// 定义状态的代表值
const StateYwMap = {
0:'未办理',
1:'办理中',
2:'办理完成'
} export const tableColums = [
{
title: '基本信息',
// hideInTable:true, // 此行不在表格里显示
search: false,
render:(text,record,index)=>{
return (
<div>
<div>机构名称:{record.orgName}</div>
<div>
业务状态:{
StateYwMap[record.stateYw]
}
</div>
<div>
签约状态:{
record.isSigning
}
</div>
</div>
)
}
}
]
四、封装proTable
ProTab(高级表格)的使用的更多相关文章
- 使用Vue.js制作仿Metronic高级表格(一)静态设计
Metronic高级表格是Metonic框架中自行实现的表格,其底层是Datatables.本教程将主要使用Vue实现交互部分,使用Bootstrap做样式库.jQuery做部分用户交互(弹窗). 使 ...
- OAF中的TableLayout 高级表格
我们经常会遇到这种情况,我们要把显示界面分成几块区域来分别显示不同的内容.比如在同一行左边显示messageComponentLayout,右边显示table,这时,我们就要用到tableLayout ...
- 【共享单车】—— React后台管理系统开发手记:AntD Table高级表格
前言:以下内容基于React全家桶+AntD实战课程的学习实践过程记录.最终成果github地址:https://github.com/66Web/react-antd-manager,欢迎star. ...
- html02表格的使用
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- html表格的基本用法
表格的基本用法 1.<!DOCTYPE html><html><head lang="en"> <meta charset="U ...
- 获取extjs text列修改过 数据
ExtJS中表格的特性简介 表格由类Ext.grid.GridPanel定义,继承自Ext.Panel,xtype为grid 表格的列信息由Ext.grid.ColumnModel定义 表格的数据存储 ...
- flex控件总结
Flex基本控件总结 一.flex控件的分类:文本控件(text controls).数据源控件(data provider controls).菜单控件 (menu controls) ...
- JSF初学之概念篇1
先转一篇介绍JSF的文章: Javaserver Faces 简介 — 什么是 JSF? 作者:Chris Schalk,Oracle Corporation2005 年 4 月 什么是 JSF? J ...
- PHPWord插件详解
一下载PHPWorld并配置项目 1.PHPWord框架文件如下: 二使用word模板并使用PHPWord生成doc文件 例如:源代码如下: <?php require_once '../PHP ...
- HTML5⑥
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
随机推荐
- PostMan——安装使用教程(图文详解)
https://blog.csdn.net/m0_61843874/article/details/123324727 postman使用教程1-安装与使用: https://www.cnblogs. ...
- uni-app打包到安卓步骤
1.打包到安卓 https://www.bilibili.com/video/BV1BJ411W7pX?p=56 2.打包到IOS https://www.jianshu.com/p/ef6e6e01 ...
- 使用zipFile读取文件时遇到的问题及解决(KeyError: "There is no item named 'xxx' in the archive")
问题描述 在Windows上跑一段代码时,遇到如下问题: KeyError: "There is no item named 'CDR_Data\\\\CDR.Corpus.v010516\ ...
- React报错之ref返回undefined或null
正文从这开始~ 总览 当我们试图在其对应的DOM元素被渲染之前访问其current属性时,React的ref通常会返回undefined或者null.为了解决该问题,可以在useEffect钩子中访问 ...
- Laravel - 模板中的url
<!-- 1, url --> <a href="{{url('/')}}">跳转到主页</a> <!-- 2,action 方法 ...
- Docker-02应用部署案例
1.Docker部署mysql 拉取mysql镜像 # 查询mysql镜像 docker search mysql # 拉取镜像命令 docker pull centos/mysql-57-cento ...
- [转帖]Redis重大版本整理(Redis2.6-Redis7.0)
Redis借鉴了Linux操做系统对于版本号的命名规则:node 版本号第二位若是是奇数,则为非稳定版本(例如2.7.2.9.3.1),若是是偶数,则为稳定版本(例如2.6.2.8.3.0.3.2). ...
- [转帖]KVM调整磁盘大小
https://www.jianshu.com/p/5ca598424eb9 一台win10的虚拟机磁盘空间不足了,需要调整磁盘的大小.上网搜索KVM调整磁盘大小,结果得出的博客都说只有raw格式的能 ...
- [转帖]ES集群开启X-pack认证
https://www.cnblogs.com/jclty/p/12913996.html 1.下载 1 # wget https://artifacts.elastic.co/downloads/e ...
- [转帖]MySQL ALTER TABLE: ALTER vs CHANGE vs MODIFY COLUMN
https://www.cnblogs.com/pachongshangdexuebi/p/5029152.html ALTER COLUMN 语法: ALTER [COLUMN] col_name ...