国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

React實踐之Tree組件

chanthuang / 3281人閱讀

摘要:實踐之組件實現功能渲染數據展開合并使用數據結構引用代碼組件實現代碼這是點擊時調用的方法如果當前這個沒有旋轉,那就設置旋轉,視覺效果點擊的時候設置當前

React實踐之Tree組件

實現功能

渲染數據

展開合并

使用

數據結構:

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

引用代碼:

組件實現代碼:

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 (
                         {item.title}
                    )
        }else{
            return (
                 {item.title}
            )
        }
    }

    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(
            
    {/* 第一個層級 */}
  • {this.itemTitle(itemGroup)}
  • {/* 調用tree方法 */} {this.tree(itemGroup.child)}
) 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 (
  • {this.itemTitle(item)}
  • {/* 如果當前子元素還有子元素,就遞歸使用tree方法,把當前子元素的子元素渲染出來 */} {this.tree(item.child)}
) }) } return treeItem } render() { return (
{ this.treeItemCroup(this.props.treeList) }
); } } export default Tree;

效果圖:

DOM結構圖


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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/88813.html

相關文章

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

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

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

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

    DobbyKim 評論0 收藏0
  • webpack 基礎與項目優化實踐總結

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

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

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

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

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

    whlong 評論0 收藏0

發表評論

0條評論

chanthuang

|高級講師

TA的文章

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