日韩性视频-久久久蜜桃-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ò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲av无码乱码国产精品久久 | 永久免费无码av网站在线观看 | 超碰精品在线观看 | 国产综合在线观看视频 | 亚洲图片自拍偷拍区 | 色综合视频在线观看 | www.日日干 | 一二三四视频社区在线 | 热热热色 | 欧美日韩一本 | 伊人午夜 | 国产日本欧美一区二区 | 91精品啪| 欧美午夜精品久久久 | 国产真实伦对白全集 | 亚洲欧洲日韩在线 | 亚洲情侣在线 | av在线小说 | www.久久网 | 成人动漫免费在线观看 | 波多野结衣在线免费观看视频 | 东北少妇露脸无套对白 | 一个人看的www片免费高清中文 | 一区二区三区四区视频 | 亚洲777 | 成人黄色片免费 | 麻豆精品久久久久久久99蜜桃 | 可以免费观看的毛片 | 骚虎av| 三级在线看中文字幕完整版 | 456av| 久久精品偷拍视频 | 国产又粗又猛又爽又黄的 | 中文字幕狠狠干 | 91精品网站 | 国产精品23p | 亚洲天堂社区 | 美女主播福利视频 | 精品人妻无码一区二区三区 | 黄色一及片 | 国产亚州av | 色99视频| 长河落日电视连续剧免费观看01 | 无码黑人精品一区二区 | 欧美在线观看不卡 | 日韩欧美在线播放 | 少妇精品视频一区二区 | 天堂а√在线中文在线鲁大师 | 日本福利网站 | 一级性生活大片 | 一区二区免费在线视频 | 婷婷六月网 | 国产片免费 | 国产免费一区二区三区三州老师 | av最新网址 | 青娱乐国产视频 | 性欧美free | 中国大陆毛片 | 欧美日韩精品一区二区三区 | 黄色三级网站在线观看 | 国产精品一区二区三区免费观看 | 精彩久久| 韩日视频在线观看 | 91精品大片 | 黄色香蕉视频 | 婷婷狠狠操 | 国产精品自产拍高潮在线观看 | 金瓶风月在线 | 亚洲xx视频| 女人18毛片水真多 | 久久中文字幕高清 | 一本色道久久88加勒比—综合 | 秋霞影院一区二区 | 欧美日韩国产高清视频 | 日本高清视频网站 | 无码人妻久久一区二区三区不卡 | 中文字幕av第一页 | 久久久综合av | 91在线高清| 小视频黄色 | 久久国产精品国语对白 | av男女 | 久久久嫩草 | 色天堂视频 | 伊人色av | 2019天天操| 在线视频免费播放 | 国产又粗又猛又爽又黄视频 | 无码人妻一区二区三区av | 中文字幕在线视频一区二区 | 亚洲无码精品一区二区三区 | 色图18p| 国产午夜成人久久无码一区二区 | 精品少妇无码av无码专区 | 在线视频日韩精品 | caoporen在线 | 成人性生交大片免费 | 国产精品mm| 欧美丰满老熟妇aaaa片 |