中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Tree組件如何在React中使用

發布時間:2021-03-30 16:21:46 來源:億速云 閱讀:228 作者:Leah 欄目:web開發

今天就跟大家聊聊有關Tree組件如何在React中使用,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

數據結構:

const node = {
 title: '00000', 
 key: '0' ,
 level:'level1',
 open: true,
 child:[ 
   {
    title: '0-111111', 
    key: '0-0',
    level:'level2',
    open: true,
    child:[ 
      { 
       title: '0-1-1111', 
       key: '0-0-0',
       level:'level3',  
      }, 
      { 
       title: '0-1-2222', 
       key: '0-0-1',
       level:'level3',
       open: true,
       child: [
         { 
         title: '0-1-2-11111', 
         key: '0-0-1-0',
         level:'level4',
         open: true,
         child: [
           { 
           title: '0-1-2-1-111', 
           key: '0-0-1-0-0',
           level:'level5',
          }
         ]
        }
       ]
      },
      { 
       title: '0-1-33333', 
       key: '0-0-4',
       level:'level3',
      }, 
    ]
   },
   {
    title: '0-222222', 
    key: '0-2',
    level:'level2',
    open: false,
    child: [
     {
      title: '0-2-1111', 
      key: '0-2-0',
      level:'level3',
     },
     {
      title: '0-2-22222', 
      key: '0-2-1',
      level:'level3',
     },
     {
      title: '0-2-33333', 
      key: '0-2-2',
      level:'level3',
     }
    ]
   }
 ]
}

引用代碼:

<div>
  <Tree 
    treeList = {node}
  /> 
</div>

組件實現代碼:

import React, { Component } from 'react';
import classNames from 'classnames';
const history = createHistory();
import {
  BrowserRouter as Router,
  HashRouter,
  Route,
  Link,
  Switch,
  NavLink
 } from 'react-router-dom';

class Tree extends Component {

  constructor(props){
    super(props)
    this.treeItemCroup  = this.treeItemCroup.bind(this);
    this.handleClick   = this.handleClick.bind(this);

    this.state ={
      openList : false
    }
  }

  handleClick(e) {
    // 這是點擊?? 時調用的方法
    // 如果當前這個?? 沒有旋轉,那就設置旋轉,視覺效果
    e.target.style.transform = e.target.style.transform == "rotate(-90deg)" ? "rotate(0deg)" : "rotate(-90deg)"
    for(let item in e.target.parentNode.parentNode.childNodes){
      // 點擊的時候設置當前層級的子元素素隱藏
      // 操作了DOM,我很難受
      if(item > 0){
        e.target.parentNode.parentNode.childNodes[item].style.display = e.target.parentNode.parentNode.childNodes[item].style.display === 'none' ? 'block' : 'none' 
      }
    }
  }
  
  itemTitle(item){
    // 這個是返回title,因為有時候是點擊一個鏈接,所以設置了兩種情況,如果node節點里面有component這個節點,那就設置成可以點擊跳轉
    if(item.component){ 
      return (<Link to={ item.component } >
             <span onClick={this.handleClick.bind(this)}>{item.title}</span>
          </Link>)
    }else{
      return (
         <span onClick={this.handleClick.bind(this)}>{item.title}</span>
      )
    }
  }

  treeItemCroup(itemGroup) {
    let itemGroupItem = []
    // 每個元素的樣式,根據當前等級來設置樣式,level1的就縮緊20px,level2的縮緊40px,一次類推,在視覺上呈現樹的形式
    let itemStyle = {
        paddingLeft: 20*parseInt(itemGroup.level.slice(5), 10)+'px'
      }
    // 如果當前節點還有子元素,就設置一個?? 箭頭 ,可以點擊展開。
    let iconChevron = classNames('fa',{'fa-chevron-down' : itemGroup.child})
    // 把所有節點放在一個數組里面
    itemGroupItem.push(
      <ul>
        {/* 第一個層級 */}
        <li className={itemGroup.level} key={itemGroup.key} style={itemStyle}>
          <i aria-hidden="true" className={iconChevron} onClick={this.handleClick.bind(this)}></i>
          {this.itemTitle(itemGroup)}
        </li>
        {/* 調用tree方法 */}
        {this.tree(itemGroup.child)}
      </ul>
    )
    return itemGroupItem
  }

  tree(child){
    let treeItem
    // 如果有子元素
    if(child){ 
      // 子元素是數組的形式,把所有的子元素循環出來
      treeItem = child.map((item, key) => {
        // 同理,設置樣式
        let itemStyle = {
          paddingLeft: 20*parseInt(item.level.slice(5), 10)+'px'
        }
        // 同理,設置?? 
        let iconChevron = classNames('fa',{'fa-chevron-down' : item.child})
        return (
          <ul>
            <li className={item.level} key={key} style={itemStyle}>
              <i aria-hidden="true" className={iconChevron} onClick={this.handleClick.bind(this)}></i>
              {this.itemTitle(item)}
            </li>
            {/* 如果當前子元素還有子元素,就遞歸使用tree方法,把當前子元素的子元素渲染出來 */}
            {this.tree(item.child)}
          </ul>
        )
      })
    }
    return treeItem
  }

  render() {
    return (
      <div className="tree">
        { this.treeItemCroup(this.props.treeList) }
      </div>
    );
  }
}

export default Tree;

效果圖:

Tree組件如何在React中使用

DOM結構圖

Tree組件如何在React中使用

Tree組件如何在React中使用

看完上述內容,你們對Tree組件如何在React中使用有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

聂荣县| 盐津县| 镇坪县| 德州市| 淅川县| 德阳市| 沽源县| 金华市| 玛多县| 和林格尔县| 富阳市| 黔江区| 汉阴县| 福海县| 岑巩县| 阳东县| 武冈市| 辉南县| 特克斯县| 昭通市| 观塘区| 乌恰县| 东乡| 拉萨市| 龙南县| 阳山县| 黎城县| 南木林县| 临潭县| 罗甸县| 宜君县| 大埔县| 克拉玛依市| 江陵县| 个旧市| 白水县| 璧山县| 蓬莱市| 桐庐县| 谢通门县| 吴江市|