摘要:實踐之組件實現(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(
效果圖:
DOM結(jié)構(gòu)圖
代碼我加了一些注釋,可能還是比較難理清楚邏輯 ?
當(dāng)前的邏輯我覺得有點混亂,希望看的朋友們能給出一點建議,感激不盡
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/88813.html
摘要:本文用于闡述模式的算法和數(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)部看,存在兩種不同的...
摘要:在該版本發(fā)布之后,開發(fā)團隊并不會繼續(xù)發(fā)布新的特性,而會著眼于進行重大的錯誤修復(fù)。發(fā)布每六個星期,團隊就會創(chuàng)建新的分支作為發(fā)布通道,本文即是對新近發(fā)布的版本進行簡要介紹。 showImg(https://segmentfault.com/img/remote/1460000013229009); 前端每周清單專注前端領(lǐng)域內(nèi)容,以對外文資料的搜集為主,幫助開發(fā)者了解一周前端熱點;分為新聞熱...
摘要:前言本文基于,主要涉及基本概念基本配置和實際項目打包優(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)參考鏈接,實踐部分基于自己的項目進行...
摘要:需要注意的是,在中,需要把數(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...
摘要:表示調(diào)用棧在下一將要執(zhí)行的任務(wù)。兩方性能解藥我們一般有兩種方案突破上文提到的瓶頸將耗時高成本高易阻塞的長任務(wù)切片,分成子任務(wù),并異步執(zhí)行這樣一來,這些子任務(wù)會在不同的周期執(zhí)行,進而主線程就可以在子任務(wù)間隙當(dāng)中執(zhí)行更新操作。 showImg(https://segmentfault.com/img/remote/1460000016008111); 性能一直以來是前端開發(fā)中非常重要的話題...
閱讀 3559·2021-10-09 09:43
閱讀 6172·2021-09-07 10:15
閱讀 2757·2019-08-30 14:03
閱讀 3087·2019-08-29 11:01
閱讀 1724·2019-08-29 10:56
閱讀 1087·2019-08-28 17:52
閱讀 3508·2019-08-26 11:42
閱讀 2563·2019-08-26 10:33