酷似野狗没朋友 2019-09-28 13:35 采纳率: 0%
浏览 451

react 实现递归 不知道为啥渲染不到 初学者在线求教 急急急!!!感恩大佬

图片说明

import React, {Component} from "react";
import {connect} from "react-redux";
import { Tree, Icon } from 'antd';


const {TreeNode} = Tree ;


class BasicArea extends Component {
  constructor(props) {
    super(props);
    this.state = {
      treeArr: []
    }
  }



  data= [
    {
      "id":1,
      "name":"一级节点",
      "parentId":0,
      "isValid":true,
      "canAddChild":true,
      "parent":null,
      "children":[]
    },{
      "id":3,
      "name":"二级节点",
      "parentId":1,
      "isValid":true,
      "canAddChild":true,
      "parent":null,
      "children":[]
    },{
      "id":3,
      "name":"二级节点",
      "parentId":0,
      "isValid":true,
      "canAddChild":true,
      "parent":null,
      "children":[]
    },{
      "id":3,
      "name":"二级节点",
      "parentId":0,
      "isValid":true,
      "canAddChild":true,
      "parent":null,
      "children":[]
    },{
      "id":3,
      "name":"二级节点",
      "parentId":0,
      "isValid":true,
      "canAddChild":true,
      "parent":null,
      "children":[]
    }

  ]

  createTree = data => {
    let treeArr = [];
    //获取顶级父元素集合
    let roots = data.filter( elemt => elemt.parentId === 0 );
    treeArr.push(...roots);
    //从顶级元素开始,获取每个元素的子元素放到该元素的children树形中
    const getChildren = (resultarr, data) => {
      resultarr.forEach ((elemt,index) => {
        elemt.children = data.filter((item,index) => item.patentId === elemt.id );
        //判断当前元素是不是有子元素被添加, 如果有, 再在子元素这一层循环
        if( elemt.children.length > 0){
          getChildren(elemt.children,data);
        }
      });
    }
    getChildren(treeArr,data);
    console.log(treeArr);
    //最后更新一下数据
    this.setState({
      treeArr
    })

  };

  renderTree = treeArr => treeArr.map ( value => {

    //理论上支持无限深度的树状目录
    //遍历树状数组,如果发现他有children则先套上<TreeNode></TreeNode>,在对他children中的元素做相同的操作,直到children为空的元素停止
    //说明他已经是最深的那一层了
    if(value.children) {
      return(
        <TreeNode title ={
          <span>
            {value.name}
            <Icon type="plus" />
          </span>
        } key={value.id}>
          {/* 对children中的每个元素进行递归 */}
          {this.renderTree(value.children)}
        </TreeNode>
      )
    }

  });




  render(){
    return(
      <Tree>

        {this.renderTree(this.state.treeArr)}
      </Tree>
    )
  }

  componentDidMount(){
    this.createTree();
  }

}

export default connect(null, null)(BasicArea);

  • 写回答

2条回答

  • zqbnqsdsmd 2019-09-30 23:55
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题