Ant Design Pro 之 ProTable使用操作
標簽<ProTable>

Pro-Table 是阿里Ant Design Pro V4版本,在Table基礎上再封裝的一個組件,包含完整的增刪改查邏輯,不用復雜的操作,簡單幾個配置即可實現(xiàn)
官網(wǎng)Api地址
示例
V4版本剛出不久,網(wǎng)上的教程還比較少,踩了不少坑,把自己學習過程分享出來,希望可以幫到你
創(chuàng)建項目(需要node.js及npm環(huán)境)
npm config set registry https://registry.npm.taobao.org npm i yarn -g yarn config set registry https://registry.npm.taobao.org //進入你準備創(chuàng)建項目的目錄 yarn create umi my-app cd my-app yarn yarn start
創(chuàng)建項目完成后如圖

登錄后如圖

添加菜單
V4版本目錄結構有一些改變,影響不大,按步驟創(chuàng)建就行了

完成后,在basicCustomer.tsx中寫入helloworld,測試能否成功訪問
import React from "react";
class Customer extends React.Component{
render(){
return (
<div>helloworld</div>
);
}
}
export default Customer;
成功后用下面代碼替換
import { DownOutlined, PlusOutlined } from '@ant-design/icons';
import { Button, Dropdown, Menu} from 'antd';
import React, { useRef } from 'react';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import ProTable, { ProColumns, ActionType } from '@ant-design/pro-table';
import { selectPage } from './service';
const TableList: React.FC<{}> = () => {
const actionRef = useRef<ActionType>();
const columns: ProColumns[] = [
{
title: '客戶名稱', //表頭顯示的名稱
dataIndex: 'name', // 列數(shù)據(jù)在數(shù)據(jù)項中對應的路徑,支持通過數(shù)組查詢嵌套路徑
width: '20%',
},
{
title: '經(jīng)營性質',
dataIndex: 'nature',
filters: [ // 表頭的篩選菜單項
{ text: '個人', value: '個人' },
{ text: '一般納稅人', value: '一般納稅人' },
],
width: '20%',
},
{
title: '聯(lián)系人',
dataIndex: 'linkMan',
hideInSearch : 'false', // 設置搜索欄是否顯示
},
{
title: '聯(lián)系電話',
dataIndex: 'linkPhone',
hideInSearch : 'false',
},
{
title: '稅號',
dataIndex: 'taxNumber',
},
{
title: '狀態(tài)',
dataIndex: 'status',
valueEnum: { //當前列值的枚舉
false: { text: '禁用', status: 'Error' }, //false是后臺傳的值,text是頁面顯示的,status是antd提供的狀態(tài),具體看api
true: { text: '啟用', status: 'Success' },
},
},
];
return (
<PageHeaderWrapper> //布局標簽
<ProTable //表格Pro組件
headerTitle="查詢表格" //表頭
actionRef={actionRef} //用于觸發(fā)刷新操作等,看api
rowKey="id" //表格行 key 的取值,可以是字符串或一個函數(shù)
toolBarRender={(action, { selectedRows }) => [
<Button icon={<PlusOutlined />} type="primary" onClick={()=>{}}>
新建
</Button>,
selectedRows && selectedRows.length > 0 && (
<Dropdown
overlay={
<Menu
selectedKeys={[]}
>
<Menu.Item key="remove">批量刪除</Menu.Item>
</Menu>
}
>
<Button>
批量操作 <DownOutlined />
</Button>
</Dropdown>
),
]}
request={(params) => selectPage(params)}//請求數(shù)據(jù)的地方,例子是用mock模擬數(shù)據(jù),我是在后臺請求的數(shù)據(jù)
columns={columns} //上面定義的
rowSelection={{}}
/>
</PageHeaderWrapper>
);
};
export default TableList;
下面是請求數(shù)據(jù)的service
import Qs from "qs";
import request from "umi-request";
const getRandomuserParams = (params:any) => {
return {
pageSize: params.pageSize,
pageIndex: params.current,
...params
};
};
export async function selectPage(params:any) {
console.log(getRandomuserParams(params))
const res = request('/server/api/basic/basicCustomer/selectPageListCopy', {
method: 'POST',
headers:{
'Content-Type':'application/x-www-form-urlencoded',
appId: '1117664844619845632',
token: 'eyJhbGciOiJIUzI1NiJ9.eyJuYmYiOjE1ODYzNDQ2MjcsImlkIjoiNzkxNzA2Y2Q2M2RiM2EwMSIsImV4cCI6MTU4ODkzNjYyNywiaWF0IjoxNTg2MzQ0NjI3fQ.Gtmm-TZHlMFiEV34ncrLryjzNsv07DwnCYsChQcYEWg'
},
data: Qs.stringify(getRandomuserParams(params)),
});
return res;
}

前后端分離會有跨域問題出現(xiàn),這里在proxy里配置代理解決

'/server/api/'表示以此開頭的請求都攔截,pathRewrite表示發(fā)送請求時,所省略的
配置完成后訪問,

可以看到已經(jīng)成功了,包括分頁,以及表頭篩選,條件查詢都是可以用的,新增刪除還沒有寫,等后面再補充吧!
補充知識:ant-design-pro的ProTable中column中設置valueEnum屬性
如果是給定得默認值,使用如下:
{
title: '是否過期',
dataIndex: 'overdue',
key: 'overdue',
valueEnum: {
0: {text: '未過期',},
1: {text: '已過期',},
},
}
或者先定義
const enumList = {
0: { text: '未過期' },
1: { text: '已過期' },
};
------------------------然后使用----------------------------
{
title: '是否過期',
dataIndex: 'overdue',
key: 'overdue',
valueEnum: enumList
}
但是如果valueEnum的值是通過接口獲取的,比如說,你想用數(shù)據(jù)庫里的用戶id作為key,userName作為text:值,因為數(shù)據(jù)是會動態(tài)變化的,無法用枚舉直接自定義,下面給出一種解決方法:
const [datas, setDatas] = useState({})
useEffect(() => {
//調用接口
listOverdue().then((res) => {
//如果響應成功
if(res.bizCode===200){
let data = {};
//將拿到的返回值遍歷
res.data.map(item=>{
//使用接口返回值的id做為 代替原本的0,1
data[item.id]={
//使用接口返回值中的overdueValue屬性作為原本的text:后面的值
text: item.overdueValue,
}
})
setDatas(data)
}
})
}, []);
----------------然后使用-----------------------------
{
title: '是否過期',
dataIndex: 'overdue',
key: 'overdue',
valueEnum: datas
}
這樣就可以使用了啊~
以上這篇Ant Design Pro 之 ProTable使用操作就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
使用Vue如何寫一個雙向數(shù)據(jù)綁定(面試常見)
這篇文章主要介紹了使用Vue如何寫一個雙向數(shù)據(jù)綁定,在前端面試過程中經(jīng)常會問到,文中主要實現(xiàn)v-model,v-bind 和v-click三個命令,其他命令也可以自行補充。需要的朋友可以參考下2018-04-04
使用vue引入maptalks地圖及聚合效果的實現(xiàn)
這篇文章主要介紹了使用vue引入maptalks地圖及聚合效果的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08
vue3中通過ref獲取元素節(jié)點的實現(xiàn)
這篇文章主要介紹了vue3中通過ref獲取元素節(jié)點的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07

