成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

React實踐之Tree組件

chanthuang / 3286人閱讀

摘要:實踐之組件實現(xiàn)功能渲染數(shù)據(jù)展開合并使用數(shù)據(jù)結(jié)構(gòu)引用代碼組件實現(xiàn)代碼這是點擊時調(diào)用的方法如果當(dāng)前這個沒有旋轉(zhuǎn),那就設(shè)置旋轉(zhuǎn),視覺效果點擊的時候設(shè)置當(dāng)前

React實踐之Tree組件

實現(xiàn)功能

渲染數(shù)據(jù)

展開合并

使用

數(shù)據(jù)結(jié)構(gòu):

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",
          }
        ]
      }
  ]
}

引用代碼:

組件實現(xiàn)代碼:

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) {
        // 這是點擊?? 時調(diào)用的方法
        // 如果當(dāng)前這個?? 沒有旋轉(zhuǎn),那就設(shè)置旋轉(zhuǎn),視覺效果
        e.target.style.transform = e.target.style.transform == "rotate(-90deg)" ? "rotate(0deg)" : "rotate(-90deg)"
        for(let item in e.target.parentNode.parentNode.childNodes){
            // 點擊的時候設(shè)置當(dāng)前層級的子元素素隱藏
            // 操作了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,因為有時候是點擊一個鏈接,所以設(shè)置了兩種情況,如果node節(jié)點里面有component這個節(jié)點,那就設(shè)置成可以點擊跳轉(zhuǎn)
        if(item.component){ 
            return (
                         {item.title}
                    )
        }else{
            return (
                 {item.title}
            )
        }
    }

    treeItemCroup(itemGroup) {
        let itemGroupItem = []
        // 每個元素的樣式,根據(jù)當(dāng)前等級來設(shè)置樣式,level1的就縮緊20px,level2的縮緊40px,一次類推,在視覺上呈現(xiàn)樹的形式
        let itemStyle = {
                paddingLeft: 20*parseInt(itemGroup.level.slice(5), 10)+"px"
            }
        // 如果當(dāng)前節(jié)點還有子元素,就設(shè)置一個?? 箭頭 ,可以點擊展開。
        let iconChevron = classNames("fa",{"fa-chevron-down" : itemGroup.child})
        // 把所有節(jié)點放在一個數(shù)組里面
        itemGroupItem.push(
            
    {/* 第一個層級 */}
  • {this.itemTitle(itemGroup)}
  • {/* 調(diào)用tree方法 */} {this.tree(itemGroup.child)}
) return itemGroupItem } tree(child){ let treeItem // 如果有子元素 if(child){ // 子元素是數(shù)組的形式,把所有的子元素循環(huán)出來 treeItem = child.map((item, key) => { // 同理,設(shè)置樣式 let itemStyle = { paddingLeft: 20*parseInt(item.level.slice(5), 10)+"px" } // 同理,設(shè)置?? let iconChevron = classNames("fa",{"fa-chevron-down" : item.child}) return (
  • {this.itemTitle(item)}
  • {/* 如果當(dāng)前子元素還有子元素,就遞歸使用tree方法,把當(dāng)前子元素的子元素渲染出來 */} {this.tree(item.child)}
) }) } return treeItem } render() { return (
{ this.treeItemCroup(this.props.treeList) }
); } } export default Tree;

效果圖:

DOM結(jié)構(gòu)圖


代碼我加了一些注釋,可能還是比較難理清楚邏輯 ?
當(dāng)前的邏輯我覺得有點混亂,希望看的朋友們能給出一點建議,感激不盡

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/88813.html

相關(guān)文章

  • 少婦白潔系列React StateUp Pattern, Explained

    摘要:本文用于闡述模式的算法和數(shù)學(xué)背景,以及解釋了它為什么是里最完美的狀態(tài)管理實現(xiàn)。歡迎大家討論和發(fā)表意見。 本文用于闡述StateUp模式的算法和數(shù)學(xué)背景,以及解釋了它為什么是React里最完美的狀態(tài)管理實現(xiàn)。 關(guān)于StateUp模式請參閱:https://segmentfault.com/a/11... P-State, V-State 如果要做組件的態(tài)封裝,從組件內(nèi)部看,存在兩種不同的...

    20171112 評論0 收藏0
  • 前端每周清單第 50 期: AngularJS and Long Term Support, Web

    摘要:在該版本發(fā)布之后,開發(fā)團隊并不會繼續(xù)發(fā)布新的特性,而會著眼于進行重大的錯誤修復(fù)。發(fā)布每六個星期,團隊就會創(chuàng)建新的分支作為發(fā)布通道,本文即是對新近發(fā)布的版本進行簡要介紹。 showImg(https://segmentfault.com/img/remote/1460000013229009); 前端每周清單專注前端領(lǐng)域內(nèi)容,以對外文資料的搜集為主,幫助開發(fā)者了解一周前端熱點;分為新聞熱...

    DobbyKim 評論0 收藏0
  • webpack 基礎(chǔ)與項目優(yōu)化實踐總結(jié)

    摘要:前言本文基于,主要涉及基本概念基本配置和實際項目打包優(yōu)化。關(guān)于概念方面參考官網(wǎng),常用配置來自于網(wǎng)絡(luò)資源,在文末有相關(guān)參考鏈接,實踐部分基于自己的項目進行優(yōu)化配置。同一文件中,修改某個影響其他。 前言:本文基于weboack4.x,主要涉及webpack4 基本概念、基本配置和實際項目打包優(yōu)化。關(guān)于概念方面參考官網(wǎng),常用配置來自于網(wǎng)絡(luò)資源,在文末有相關(guān)參考鏈接,實踐部分基于自己的項目進行...

    Scorpion 評論0 收藏0
  • 我為什么從Redux遷移到了Mobx

    摘要:需要注意的是,在中,需要把數(shù)據(jù)聲明為。同時還提供了運行時的類型安全檢查。在利用了,使異步操作可以在一個函數(shù)內(nèi)完成并且可以被追蹤。例如在中,數(shù)組并不是一個,而是一個類的對象,這是為了能監(jiān)聽到數(shù)據(jù)下標(biāo)的賦值。 Redux是一個數(shù)據(jù)管理層,被廣泛用于管理復(fù)雜應(yīng)用的數(shù)據(jù)。但是實際使用中,Redux的表現(xiàn)差強人意,可以說是不好用。而同時,社區(qū)也出現(xiàn)了一些數(shù)據(jù)管理的方案,Mobx就是其中之一。 R...

    DevYK 評論0 收藏0
  • 漫談前端性能 突破 React 應(yīng)用瓶頸

    摘要:表示調(diào)用棧在下一將要執(zhí)行的任務(wù)。兩方性能解藥我們一般有兩種方案突破上文提到的瓶頸將耗時高成本高易阻塞的長任務(wù)切片,分成子任務(wù),并異步執(zhí)行這樣一來,這些子任務(wù)會在不同的周期執(zhí)行,進而主線程就可以在子任務(wù)間隙當(dāng)中執(zhí)行更新操作。 showImg(https://segmentfault.com/img/remote/1460000016008111); 性能一直以來是前端開發(fā)中非常重要的話題...

    whlong 評論0 收藏0

發(fā)表評論

0條評論

chanthuang

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<