日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

react - antd (Table 与 Cascader 平级数据转树形实操)

發(fā)布時(shí)間:2025/3/19 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 react - antd (Table 与 Cascader 平级数据转树形实操) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

如果你剛開始學(xué)習(xí)前端或者 React,將 UI 框架作為你的第一步可能不是最好的主意。 (這是引用antd官網(wǎng)的一句話),雖然說(shuō)一開始用antd作為UI框架對(duì)新手來(lái)說(shuō)并不是很好,但是如果工作需要呢,那就不得不這樣做了。

下面我就挑兩個(gè)常用而且對(duì)新手稍微有點(diǎn)難度組件來(lái)進(jìn)行講解,分別是table 表格和 Cascader級(jí)聯(lián)選擇。

antd -> Table 樹形數(shù)據(jù)展示

效果如下:

第一步:打開鏈接,完成安裝和初始化和引入antd兩個(gè)步驟;

第二步:把src里面的文件全部刪除,然后分別創(chuàng)建 App.js 、 data.js 、 index.js

index.js 代碼如下:

import React from 'react'; import ReactDOM from 'react-dom'; import 'antd/lib/button/style'; import App from './App'; ReactDOM.render(<App />, document.getElementById('root')); 復(fù)制代碼

data.js 是我封裝的數(shù)據(jù),代碼如下:

export default class Model {static get(){const datas=[{id:'01',name:"第一級(jí)01",children:[{id:'001',name:"第二級(jí)01",children:[{id:'0001',name:'第三級(jí)01'},{id:'0002',name:'第三級(jí)02'}]},{id:'002',name:'第二級(jí)02',}]},{id:'02',name:'第一級(jí)02',},]return datas;} }復(fù)制代碼

App.js 開始使用Table進(jìn)行實(shí)操啦,代碼如下:

import React, { Component } from 'react'; import Model from './data' import {Table} from 'antd'; import 'antd/dist/antd.css'; const columns = [{title: '編碼',dataIndex: 'id',}, {title: '名稱',dataIndex: 'name',}]; export default class App extends Component{state={tableData:[], //表格數(shù)據(jù)}componentDidMount () {// 獲取數(shù)據(jù)樹this.handleDataTree();}handleDataTree=()=>{// 獲取data.js里面的數(shù)據(jù)const da = Model.get();if(da && da.length>0){this.handleGetChild(da);this.setState({tableData:da,})}}handleGetChild = (data) =>{for(let x = 0,le =data.length; x<le;x +=1){data[x] = {...data[x],key:data[x].id,code:data[x].id,name:data[x].name,}if (data[x].children && data[x].children.length > 0) {this.handleGetChild(data[x])}}}render(){return(<div><Table columns={columns} dataSource={this.state.tableData} pagination={false} //不展示分頁(yè)器,如果需要?jiǎng)h除該行代碼即可rowKey={recode => recode.id} //表格行的key/></div>)} } 復(fù)制代碼

注意: 1.Table里面帶的參數(shù)可以看官網(wǎng)的API。

? 2.如果只想展示到某一級(jí)的話就只需要在調(diào)用this.handleGetChild(da,index);的時(shí)候傳遞一個(gè)數(shù)據(jù)(就是代碼里的index),然后再

if (data[x].children && data[x].children.length > 0) {this.handleGetChild(data[x],index+1)} 復(fù)制代碼

? 這段代碼里面加上一個(gè)index+ 1 最后在寫一個(gè)if語(yǔ)句判斷一下就可以。

細(xì)講 :函數(shù)handleDataTree() 在獲取到數(shù)據(jù)后判斷,如果數(shù)據(jù)的長(zhǎng)度大于1那么就會(huì)先執(zhí)行handleGetChild()然后再把數(shù)據(jù)傳遞給this.state.tableData。至于這里為什么要調(diào)用函數(shù)來(lái)處理數(shù)據(jù)而不是直接處理數(shù)據(jù)的原因是:

如果數(shù)據(jù)只有一兩層那還好,直接寫就是了,但是如果數(shù)據(jù)有N層了呢,那就很復(fù)雜了,所以采用``````handleGetChild() ```把數(shù)據(jù)傳過(guò)去然后解析,如果這條數(shù)據(jù)里面的chilidren還有值的話,就再調(diào)用一下這個(gè)函數(shù)。這樣無(wú)論數(shù)據(jù)有多少層就都可以輕松展示了。

antd-Cascader 級(jí)聯(lián)選擇(把平級(jí)數(shù)據(jù)改為樹形)

除了App.js 和data.js 這兩個(gè)頁(yè)面的代碼跟上面的不一樣,其他的操作都是一樣的,我們先來(lái)看下效果:

data.js 代碼如下:

export default class Model {static get(){const datas=[{id:'01',name:'第一層01',parentId:'0'},{id:'001',name:'第二層001',parentId:'01'},{id:'002',name:'第二層002',parentId:'01'},{id:'0010',name:'第三層0010',parentId:'001'},{id:'0020',name:'第三層0020',parentId:'002'},{id:'0021',name:'第三層0021',parentId:'002'},]return datas;} }復(fù)制代碼

App.js 代碼如下:

import React, { Component } from 'react'; import Model from './data' import {Cascader} from 'antd'; import 'antd/dist/antd.css'; export default class App extends Component{state={cascaderData:[], //數(shù)據(jù)}onChange=(value)=> {console.log(value);}componentDidMount () {// 獲取數(shù)據(jù)樹this.handleDataTree();}handleDataTree=()=>{// 獲取data.js里面的數(shù)據(jù)const da = Model.get();if(da && da.length>0){let dataMap = {};da.forEach((item)=>{dataMap[item.id]={key:item.id,value:item.id,label:item.name,parentId:item.parentId}})let root={};for(const key in dataMap){if(key){const {parentId} = dataMap[key];if(parentId === '0'){root = dataMap[key]}else if(dataMap[parentId]){if(!dataMap[parentId].children){dataMap[parentId].children=[]}dataMap[parentId].children.push(dataMap[key])}}}this.setState({cascaderData:[root]})}}render(){return(<div><Cascader options={this.state.cascaderData} onChange={this.onChange} placeholder="Please select" /></div>)} } 復(fù)制代碼

這里需要注意的是如果想要完成改代碼就需要找到子元素的某個(gè)數(shù)據(jù) = 父元素的某個(gè)數(shù)據(jù),只有找到這個(gè)原理才能完成這個(gè)效果。

這里的const {parentId} = dataMap[key];是把dataMap[key]里的parentId解構(gòu)出來(lái)。

總結(jié)

以上是生活随笔為你收集整理的react - antd (Table 与 Cascader 平级数据转树形实操)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产白浆在线观看 | 亚洲欧美999 | 免费黄色小视频在线观看 | 久久国产乱 | 亚洲AV永久无码国产精品国产 | 青青草国产精品视频 | 韩国中文三级hd字幕 | 亚洲国产一区二区三区a毛片 | 欧美激情久久久久 | 日本网站黄色 | 国精无码欧精品亚洲一区蜜桃 | 久久久久久久久久久久97 | 最新中文字幕一区 | 亚洲中字 | 三上悠亚中文字幕在线播放 | 综合激情久久 | 亚洲涩色 | 成人一级影视 | 最新毛片网站 | 丝袜视频在线观看 | 亚洲欧美日韩国产一区二区 | 自拍偷拍电影 | h在线播放 | 综合视频一区二区 | 久久综合久久久 | 日韩一区不卡视频 | 男人插入女人下面的视频 | 久久久久久欧美精品se一二三四 | 欧美精品一区三区 | 五月天激情开心网 | 妞干网av| 95视频在线 | 免费 成 人 黄 色 | 国产精品四虎 | 怡红院综合网 | 涩涩视频网站在线观看 | 亚洲爱爱av | 男人的天堂av女优 | 香蕉视频污在线观看 | 免费观看视频一区二区 | 精品无码久久久久久久久久 | 日韩欧美成人一区二区三区 | 在线观看黄色小视频 | 91成人免费版 | 国产网红在线观看 | 亚洲色图久久 | 91xxx在线观看| 三级网站在线免费观看 | 91精品亚洲一区 | 国产最新av | 亚洲成av人片一区二区梦乃 | 久久奇米 | 欧美干干干| 欧美熟妇交换久久久久久分类 | 男女污污网站 | 亚洲一区二区三区播放 | 国产每日更新 | 欧美人妖69xxxxxhd3d | 日本不卡1| 久久久久久久免费 | 日本一卡二卡在线 | 久久精品男人的天堂 | 亚洲午夜视频在线 | 国产美女被草 | a级免费视频 | 超碰97观看 | 亚洲伦理网站 | 九七伦理电影 | 国产综合婷婷 | a黄视频 | 男人天堂手机在线 | 91精品免费视频 | 日日草天天干 | 午夜tv影院 | 久草中文在线观看 | 麻豆视频黄色 | 日本美女视频网站 | 精品久久久久久久久久久久久久久久久久 | 亚洲一区二区三区婷婷 | 亚洲永久免费av | www.在线观看av | 成人一区二区视频 | 国产成人精品免高潮费视频 | 伊人色在线 | 美日韩一区二区三区 | 免费性爱视频 | 国产日产欧洲无码视频 | 深夜福利av| 又粗又猛又爽又黄的视频 | chinese中国性按摩hd | 极品销魂美女少妇尤物 | 午夜精品一区二区三区三上悠亚 | 精品国精品国产 | 久久精品天天中文字幕人妻 | 蜜桃精品在线观看 | wwwjavhd| 欧美黑大粗 | 一区二区三区蜜桃 | 亚洲视频一二 |