如果你刚开始学习前端或者 React,将 UI 框架作为你的第一步可能不是最好的主意。 (这是引用antd官网的一句话),虽然说一开始用antd作为UI框架对新手来说并不是很好,但是如果工作需要呢,那就不得不这样做了。

下面我就挑两个常用而且对新手稍微有点难度组件来进行讲解,分别是table 表格和 Cascader级联选择。

antd -> Table 树形数据展示

效果如下:

第一步:打开链接,完成安装和初始化引入antd两个步骤;

第二步:把src里面的文件全部删除,然后分别创建 App.jsdata.jsindex.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'));
复制代码

data.js 是我封装的数据,代码如下:

export default class Model {static get(){const datas=[{id:'01',name:"第一级01",children:[{id:'001',name:"第二级01",children:[{id:'0001',name:'第三级01'},{id:'0002',name:'第三级02'}]},{id:'002',name:'第二级02',}]},{id:'02',name:'第一级02',},]return datas;}
}复制代码

App.js 开始使用Table进行实操啦,代码如下:

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:[],  //表格数据}componentDidMount () {// 获取数据树this.handleDataTree();}handleDataTree=()=>{// 获取data.js里面的数据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} //不展示分页器,如果需要删除该行代码即可rowKey={recode => recode.id}  //表格行的key/></div>)}
}
复制代码

注意: 1.Table里面带的参数可以看官网的API。

​ 2.如果只想展示到某一级的话就只需要在调用this.handleGetChild(da,index);的时候传递一个数据(就是代码里的index),然后再

 if (data[x].children && data[x].children.length > 0) {this.handleGetChild(data[x],index+1)}
复制代码

​ 这段代码里面加上一个index+ 1 最后在写一个if语句判断一下就可以。

细讲 :函数handleDataTree() 在获取到数据后判断,如果数据的长度大于1那么就会先执行handleGetChild()然后再把数据传递给this.state.tableData。至于这里为什么要调用函数来处理数据而不是直接处理数据的原因是:

如果数据只有一两层那还好,直接写就是了,但是如果数据有N层了呢,那就很复杂了,所以采用``````handleGetChild() ```把数据传过去然后解析,如果这条数据里面的chilidren还有值的话,就再调用一下这个函数。这样无论数据有多少层就都可以轻松展示了。

antd-Cascader 级联选择(把平级数据改为树形)

除了App.jsdata.js 这两个页面的代码跟上面的不一样,其他的操作都是一样的,我们先来看下效果:

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;}
}复制代码

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:[],  //数据}onChange=(value)=> {console.log(value);}componentDidMount () {// 获取数据树this.handleDataTree();}handleDataTree=()=>{// 获取data.js里面的数据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>)}
}
复制代码

这里需要注意的是如果想要完成改代码就需要找到子元素的某个数据 = 父元素的某个数据,只有找到这个原理才能完成这个效果。

这里的const {parentId} = dataMap[key];是把dataMap[key]里的parentId解构出来。

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

  1. React antd table使用react-resizable实现伸缩列

    首先声明注意点: 1.设置列宽的width一定要用number类型.(如果不使用number类型,会出现第一次点击时卡顿的情况) 2.less中需要设置类的样式,如果无效,可以尝试加上:global( ...

  2. React antd Table 实现单元格点击 表头斜线分组等功能

    先上成品示意图: 几个关键步骤: 一 定义数据结构: export const data = [{key: 'row1',beforeUpdateLevel: '等级1',level_1: '保',l ...

  3. react antd Table 选中某一行,其它行也被选中了

    问题描述: 使用react_antd_design 中的Table组件,渲染的结果如下: 但是现在出现的问题是当我选中其中的一行,其他的行也变成了选中的状态,无法实现选中单行 这当然不是我们想要的结果 ...

  4. react antd Table 表格 td超出自动换行

    1.问题: 目前有打印需求遇到了点问题,打印时表头太长导致出现横向滚动条,而借助于 react-to-print只能打印出视图区可见内容,所以打印的时候滚动条里面的内容没打印到. 现在为了完整打印页面 ...

  5. 前端扁平化数据转树形数据_把平级数据变成树形数据

    为了记住这个方法:转化数据 [ {element:'图片',id:'1',pid:'0'},//count=1 {element:'大图片',id:'2',pid:'1'}, {element:'pn ...

  6. React使用antd Table生成层级多选组件

    一.需求 用户对不同的应用需要有不同的权限,用户一般和角色关联在一起,新建角色的时候会选择该角色对应的应用,然后对应用分配权限.于是写了一种实现的方式.首先应用是一个二级树,一级表示的是应用分组,二级 ...

  7. react antd 更改table 表头和表行样式

    我这里以组件的形式来提供code 使实例正确运行至少需要以下知识: 1 创建react项目(本实例基于react项目) 2 知道如何导入和调用组件 样式效果如下图: 实现方法 目录结构: YMColl ...

  8. React基于antd Table实现可拖拽调整列宽的表格

    实现功能 1:表格列宽初始自动分配.列宽总和不能超过容器宽度(无横向滚动条,公司项目特殊需求) 2:当容器宽度变化时,保持当前列宽的分配比例,等比缩小 3:拖动过程中不进行列宽的调整,只有释放之后再进 ...

  9. Antd Table 点击行变换背景颜色 (Antd React)

    需求 实现的目标是,点击这一行,然后出现一个modal,这个modal可以拖拽,并且可以知道是点击哪一行出现的事件. 那么需要做的就是,点击这一行,然后其背景颜色变化. 实现 Antd Table有 ...

最新文章

  1. 深度学习目标检测模型全面综述:Faster R-CNN、R-FCN和SSD
  2. rsyslog日志管理+LogAnalyzer
  3. javascript写入xml_Javascript学习笔记(1)
  4. 算法(2)-二叉树的遍历(递归/迭代)python实现
  5. php获取当前页面数据,ThinkPHP如何获取当前页面URL信息?
  6. Java 时间处理 PeriodDuration
  7. PHP判断远程url是否有效的几种方法
  8. 递推DP URAL 1260 Nudnik Photographer
  9. xvidcore.dll not found视频播放问题
  10. 输入一个分数,将其约分为最简分式
  11. 【退役文】人退心不退,博客有空继续更
  12. Windows 10快速截图快捷键 (Windows徽标键+shift+S)
  13. 读《Ivor Horton's beginning Visual C++ 2010》有感
  14. Redis 的特点及命令大全
  15. 数据库开发转行大数据开发工程师怎么样?
  16. 英语语法汇总(14.it的用法)
  17. matlab premnmx归一化函数的使用 1、premnmx 预处理数据使数据的最小值和最大值分别为-1和1. [PN,minp,maxp,TN,mint,maxt] = premnmx(P,T)
  18. 神舟计算机调研报告,6月笔记本品牌关注调研报告 神舟居榜首
  19. 甲骨文公司(Oracle)
  20. 中考不能用计算机ka,中考电脑阅卷“内幕”,你的孩子都注意到了吗?

热门文章

  1. java程序结构_Java 程序结构说明(学习 Java 编程语言 004)
  2. python自动化测试书籍推荐豆瓣_推荐几本自动化测试的书籍
  3. win8网速怎么测试软件,Windows8小技巧:查看当前网速
  4. linux内核和w,Linux内核中Makefile、Kconfig和.config的关系
  5. gt,gte,lt,lte缩写的含义
  6. python2执行程序内存溢出导致被killed的问题因果分析
  7. 自动生成文章的html,文章自动更新工具|自动生成文件|自动伪原创|文章自动插入关键词工具...
  8. 福玛特机器人评测_深度爆料扫地机器人地宝福玛特D820评测好不好?怎么样呢?内幕曝光测评...
  9. 兰州大学C语言程序设计课程作业,兰州大学C语言程序设计课程作业1附答案.doc...
  10. 【项目管理】ITTO-质量管理