使用react开发中后台应用时,你是不是也经常会用到☺️

通常学会表格的使用,在业务开发中,就可应付50%的中后台管理界面的开发了。
总结记录一下,可以帮助我们快速的开发啦。

proTable 的基础使用
import React, { useState, useRef, useEffect } from 'react'import type { ProColumns, ActionType } from '@ant-design/pro-table'import ProTable from '@ant-design/pro-table'import { debounce } from 'lodash'// 表头字段type GithubIssueItem = {id: number;case_job_name: string; // 任务名称case_job_cron: string; // Corn表达式case_job_start_time: string; // 任务开始时间case_job_interval_time: number; // 任务间隔case_job_status: number; // 任务状态create_user: string; // 负责人case_id: string; // case id};interface SunDayProps {// props参数类型}/**interface ActionType {reload: (resetPageIndex?: boolean) => void;reloadAndRest: () => void;reset: () => void;clearSelected?: () => void;startEditable: (rowKey: Key) => boolean;cancelEditable: (rowKey: Key) => boolean;}// ActionRef 手动触发表格的刷新(例如表格编辑、删除后再次reload)const ref = useRef<ActionType>()// 刷新ref.current.reload();**/const SunDay: React.FC<props: SunDayProps> = (props) => {const ref = useRef<ActionType>()const columns: ProColumns<GithubIssueItem>[] = [{dataIndex: 'index',valueType: 'indexBorder',width: 48,},{title: '任务名称',dataIndex: 'case_job_comment',copyable: true, // 可复制ellipsis: true, // 是否自动缩略filters: true, // 查询条件中显示editable: false},{title: 'Corn',dataIndex: 'case_job_cron',filters: false,copyable: false,editable: false,search: false},{title: '任务开始时间',dataIndex: 'case_job_start_time',filters: false,copyable: false,editable: false,search: false},{title: '任务间隔',dataIndex: 'case_job_interval_time',filters: false,copyable: false,search: false,editable: false},{title: '任务状态',dataIndex: 'case_job_status',filters: true,search: false,// eslint-disable-next-line no-nested-ternaryrender: (_, row) => row.case_job_status === 0 ? '待执行' : (row.case_job_status === 1 ? '执行中' : (row.case_job_status === 2 ? '执行完成' : (row.case_job_status === 3 ? '待删除' : '已删除')))},{title: '负责人',dataIndex: 'create_user',filters: true,copyable: false,editable: false},{title: 'case id',dataIndex: 'case_id',filters: false,copyable: false,search: false,editable: false},{title: '操作',valueType: 'option',render: (text, record, _, action) => [<a onClick={this.edit}>编辑</a>,<a onClick={this.delete}>删除</a>]},]// 编辑const edit = debounce(async (record) => {const res = await backServe({id: record.id})if (res.code === 200) {// ref.current.reload() 刷新}}, 500)// 删除const delete = debounce(async (record) => {const res = await backServe({})if (res.code === 200) {// ref.current.reload() 刷新}}, 500)return (<ProTable<GithubIssueItem>rowKey="id" // antd v3 和 antd v4 有区别哦headTitle="高级表格"columns={columns}actionRef={ref}request={async (params) => {// params: T & {pageSize: number;current: number;},// 第一个参数 params 查询表单和 params 参数的结合// 第一个参数中一定会有 pageSize 和 current ,这两个参数是 antd 的规范const { pageSize, current, ...reset } = paramsconst res = await myQuery({ pageIndex: current, pageSize: pageSize, ...reset })return {data: res.result,success: true, // success 请返回 true, 不然 table 会停止解析数据,即使有数据total: res.total || 0 // 不传会使用 data 的长度,如果是分页一定要传}}}pagination={{ pageSize: 10 }}/>)}export default SunDay
