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 ...
随机推荐
- 【每日一题】29.maze (BFS 进阶)
补题链接:Here 本题代码由贺佬完成 这道题基本算一道 BFS 进阶题,有少许细节要小心 (WA1发.. #include <bits/stdc++.h> #define x first ...
- echarts折线图美化(颜色渐变、背景透明、隐藏坐标轴)
echarts折线图美化(颜色渐变.背景透明.隐藏坐标轴) https://blog.csdn.net/Changeable0127/article/details/81333559?utm_medi ...
- mongoose学习记录
1 const mongoose = require('mongoose'); 2 3 mongoose.connect('mongodb://localhost/playground') 4 .th ...
- Chrome 控制台 换行编写js调试代码
转载请注明出处: 在 chrome 浏览器的console 控制台编写 js 调试或验证代码时,每输一行换行时,就会执行当前行的函数,再重新换行输入时,就会将之前的代码忽略,这种方式就会导致 chro ...
- 【C++】在搞touchgfx时遇见了一个初始化列表顺序与类中定义不一致的问题,error:when initialized here [-Werror=reorder]
在搞touchgfx时遇见了一个初始化列表顺序与类中定义不一致的问题,error:when initialized here [-Werror=reorder] 初始化列表顺序与类中定义顺序不一致错误 ...
- [转帖]JVM系列之:再谈java中的safepoint
https://zhuanlan.zhihu.com/p/171625395 safepoint是什么 java程序里面有很多很多的java线程,每个java线程又有自己的stack,并且共享了hea ...
- [转帖]iptables ip_conntrack_max 调整
https://www.diewufeiyang.com/post/583.html 一.概念 ==================== -允许的最大跟踪连接条目:CONNTRACK_MAX(默认值是 ...
- [转帖]浅谈redis采用不同内存分配器tcmalloc和jemalloc
http://www.kaotop.com/it/173669.html 我们知道Redis并没有自己实现内存池,没有在标准的系统内存分配器上再加上自己的东西.所以系统内存分配器的性能及碎片率会对Re ...
- [转帖]ChatGPT发展历程、原理、技术架构详解和产业未来 (收录于先进AI技术深度解读)
https://zhuanlan.zhihu.com/p/590655677 陈巍谈芯::本文将介绍ChatGPT的特点.功能.技术架构.局限.产业应用.投资机会和未来.作者本人曾担任华为系自然语言处 ...
- 内网CentOS7搭建ntp服务器实现内网时间同步
内网CentOS7搭建ntp服务器实现内网时间同步 背景 公司内部有很多虚拟机,本来很简单的实现了每天晚上自动同步阿里云时间 crontab -e 1 1 * * * ntpdate ntp.aliy ...