react ant protable自定義實(shí)現(xiàn)搜索下拉框
react ant protable自定義搜索下拉框
背景
select選擇框很常見(jiàn),這里實(shí)現(xiàn) react ant protable實(shí)現(xiàn)自定義搜索下拉框
coding
const [selectEnum, setSelectEnum] = useState({});
const asyncFetch = () => {
fetch('https://localhost/api/search_list')
.then((response) => response.json())
.then((json) => setSelectEnum(json.data))
.catch((error) => {
console.log('fetch data failed', error)
});
};
// 頁(yè)面刷新,自動(dòng)發(fā)一次請(qǐng)求
useEffect(() => {
asyncFetch()
}, []);
// 防抖搜索設(shè)備
const handleSearch = debounce((val)=> {
const dispatch = async (params) => {
console.log("params=", params)
const data = await post("https://localhost/api/search_list", {
body: params
})
if (data) {
setSelectEnum(data)
}
return {
data: Array.from(data),
success: true,
}
}
dispatch({
search_key_worlds: val
}).then()
}, 1000)
const columns = [
{
title: "bookName",
dataIndex: "bookName",
hiddenInTable: true,
initialValue: "Nginx大全",
renderFormItem: () =>{
// let list = [{"id": 0, "name": "Nginx大全"}, {"id": 1, "name": "Java從入門到精通"}]
let list = Array.from(selectEnum);
const options = list.map(item => <option key={item.id}>{item.name}</option>);
return (
<Select
key="searchSelcet"
showSearch
placeholder="請(qǐng)輸入關(guān)鍵字搜索"
filterOption={false}
onSearch={handleSearch}
> {
<>
<option key="" value="">全部</option>
</>
}
{options}
</Select>
)
}
}
]antd react ProTable 基本使用
antd 全稱 Ant Design, 是目前來(lái)說(shuō)運(yùn)用最廣泛的 react 的 ui 框架, 下文就用略寫(xiě) antd 代替了
pro系列不做過(guò)多解釋, 畢竟ui框架大家也都得心應(yīng)手了, 好好看文檔幾乎沒(méi)毛病
個(gè)人分析
- 優(yōu)勢(shì):antd react確實(shí)是非常強(qiáng)大的ui框架, 其中的內(nèi)容包含了前端幾乎所有的ui, 運(yùn)用此框架幾乎可以不用寫(xiě)css樣式
- 劣勢(shì):學(xué)習(xí)難度大, 網(wǎng)上教程相對(duì)較少, 一遇到bug, 比較難解決
安裝
1.安裝 antd
yarn add antd
2.安裝 pro-table 系列
官方網(wǎng)址: https://procomponents.ant.design/docs/getting-started
yarn add @ant-design/pro-table // or cnpm i @ant-design/pro-table --save // 其他pro系列安裝 npm i @ant-design/pro-form --save npm i @ant-design/pro-layout --save npm i @ant-design/pro-table --save npm i @ant-design/pro-list --save npm i @ant-design/pro-descriptions --save npm i @ant-design/pro-card --save npm i @ant-design/pro-skeleton --save
這里要注意 antd 的版本問(wèn)題, 最好采用4.0以上的版本分享下我現(xiàn)在使用的版本,
react版本 react@17.0.2 | MIT | deps: 2 | versions: 739 // npm info react
node版本 v16.4.2 // node -v
yarn版本 1.22.11 // yarn -version
dva版本 dva-cli version 0.10.1 // dva -v
nmi版本 ^2.9.0 // umi -v
antd版本 4.8.0
溫馨提示: 一般antd安裝之后, 普通的ui插件都能使用, 安裝pro后引用就報(bào)錯(cuò), 建議先替換antd版本, 直接在package.json中修改antd的版本, 然后刪除node_modules內(nèi)的文件, 重新 cnpm install 或者 yarn install
常用字段
1.columns 數(shù)組 表格列的配置描述 (下圖紅框內(nèi)的配置)

columns = [
{
title:'名稱',// (必填) 顯示名稱
dataIndex:'name',// (必填) 根據(jù)后臺(tái)接口, 需要顯示的字段
width:48,// (選填) 展示的寬度
valueEnum: {// (選填) 選擇某個(gè)選項(xiàng), 點(diǎn)擊查詢按鈕可查詢, valueEnum 可展示單選框 status可不填
0: { text: '全部', status: 'Default' },
1: { text: '關(guān)閉', status: 'Default' },
2: { text: '運(yùn)行中', status: 'Processing' },
3: { text: '已上線', status: 'Success' },
4: { text: '異常', status: 'Error' },
all:{ text: '全選' }
},
initialValue: 1,// (選填) valueEnum的默認(rèn)值
render: (_) => <a>{_}</a>,// (選填) 不在搜索時(shí)使用, 可嵌套標(biāo)簽展示數(shù)據(jù), 多用于三目運(yùn)算符展示比較復(fù)雜的數(shù)據(jù)
filterDropdown: () => (// (選填) 添加搜索條件, 此處以搜索框?yàn)槔? 在表頭和表格上方均有篩選條件
<div style={{ padding: 8 }}>
<Input style={{ width: 188, marginBottom: 8, display: 'block' }} />
</div>
),
filterIcon: (filtered) => (// (選填) 有搜索時(shí), 可重新定義表頭中的搜索icon
<SearchOutlined style={{ color: filtered ? '#1890ff' : undefined }} />
),
filters: [{text:'全選',value:'all'}],// (選填) 對(duì)某一列數(shù)據(jù)進(jìn)行篩選,使用列的 filters 屬性來(lái)指定需要篩選菜單的列
onFilter: (value, record) => record.name.indexOf(value) === 0,// (選填) 用于篩選當(dāng)前數(shù)據(jù)
defaultSortOrder:'ascend', // (選填) 默認(rèn)排列順序 ascend | descend
valueType: 'money', // (選填) 值的類型,會(huì)生成不同的渲染器 (舉例為金額)
}
]2.request 請(qǐng)求接口查詢數(shù)據(jù)

getData方法內(nèi)容
getData = (params)=>{
const { dispatch } = this.props;
dispatch({
type: 'login/login',
payload: {
params
},
callback: (res) => {
console.log(res)
},
});
}3.dataSource 表格展示的數(shù)據(jù), 如下面例子
// 使用 dataSource={[]}
[{"key":0,"name":"AppName","containers":11,"creator":"付小小","status":"running","createdAt":1641364688922,"money":0,"progress":47,"memo":"簡(jiǎn)短備注文案"},{"key":1,"name":"AppName","containers":3,"creator":"林東東","status":"close","createdAt":1641364687979,"money":1538,"progress":8,"memo":"很長(zhǎng)很長(zhǎng)很長(zhǎng)很長(zhǎng)很長(zhǎng)很長(zhǎng)很長(zhǎng)的文字要展示但是要留下尾巴"},{"key":2,"name":"AppName","containers":0,"creator":"曲麗麗","status":"close","createdAt":1641364688524,"money":1258,"progress":69,"memo":"簡(jiǎn)短備注文案"},{"key":3,"name":"AppName","containers":12,"creator":"林東東","status":"close","createdAt":1641364688493,"money":4530,"progress":14,"memo":"很長(zhǎng)很長(zhǎng)很長(zhǎng)很長(zhǎng)很長(zhǎng)很長(zhǎng)很長(zhǎng)的文字要展示但是要留下尾巴"},{"key":4,"name":"AppName","containers":18,"creator":"曲麗麗","status":"close","createdAt":1641364687837,"money":3432,"progress":65,"memo":"簡(jiǎn)短備注文案"}]4.pagination 分頁(yè)器

pagination={{
pageSize:2,// 每頁(yè)條數(shù)
showQuickJumper: true,// 是否可以快速跳轉(zhuǎn)至某頁(yè) (就是那個(gè)輸入框)
// pageSizeOptions:[5,10,20,30,50,100], 指定每頁(yè)可以顯示多少條
// position: 'bottom' // 'top' 分頁(yè)器顯示位置
}}5.toolbar 表格的標(biāo)題
toolbar={{
title: '高級(jí)表格',
tooltip: '這是一個(gè)標(biāo)題提示',
}}6.toolBarRender 表格表頭上方的按鈕群
toolBarRender={() => [
<Button key="danger" danger>
危險(xiǎn)按鈕
</Button>,
<Button key="show">查看日志</Button>,
<Button type="primary" key="primary">
創(chuàng)建應(yīng)用
</Button>,
<Dropdown key="menu" overlay={menu}>
<Button>
<EllipsisOutlined />
</Button>
</Dropdown>,
]}總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
React實(shí)現(xiàn)多標(biāo)簽在有限空間內(nèi)展示
在業(yè)務(wù)中,需要在一個(gè)卡片組件中展示多個(gè)標(biāo)簽,標(biāo)簽組件高度相同,寬度和出現(xiàn)順序不同,要求標(biāo)簽只能在有限的空間內(nèi)展示,所以本文給大家介紹了React實(shí)現(xiàn)多標(biāo)簽在有限空間內(nèi)展示,需要的朋友可以參考下2023-12-12
React tabIndex使非表單元素支持focus和blur事件
這篇文章主要為大家介紹了React使用tabIndex使非表單元素支持focus和blur事件實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
淺談react-router HashRouter和BrowserRouter的使用
本篇文章主要介紹了淺談react-router HashRouter和BrowserRouter的使用,具有一定的參考價(jià)值,有興趣的可以了解一下2017-12-12
React自定義視頻全屏按鈕實(shí)現(xiàn)全屏功能
這篇文章主要介紹了React自定義視頻全屏按鈕實(shí)現(xiàn)全屏功能,通過(guò)繪制全屏按鈕,并綁定點(diǎn)擊事件,編寫(xiě)點(diǎn)擊事件,通過(guò)實(shí)例代碼給大家詳細(xì)講解,需要的朋友可以參考下2022-11-11
ReactNative實(shí)現(xiàn)Toast的示例
這篇文章主要介紹了ReactNative實(shí)現(xiàn)Toast的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-12-12
基于react?vant實(shí)現(xiàn)彈窗搜索功能
這篇文章主要為大家詳細(xì)介紹了如何基于react?vant實(shí)現(xiàn)彈窗搜索功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-01-01
React應(yīng)用中避免白屏現(xiàn)象的方法小結(jié)
在開(kāi)發(fā)React應(yīng)用程序時(shí),我們都曾遇到過(guò)這樣的場(chǎng)景:一個(gè)未被捕獲的異常突然中斷了組件的渲染流程,導(dǎo)致用戶界面呈現(xiàn)出一片空白,也就是俗稱的“白屏”現(xiàn)象,本文將探討如何在React應(yīng)用中有效捕獲并處理這些錯(cuò)誤,避免白屏現(xiàn)象的發(fā)生,需要的朋友可以參考下2024-06-06

