摘要:實(shí)踐之組件實(shí)現(xiàn)功能渲染數(shù)據(jù)展開(kāi)合并使用數(shù)據(jù)結(jié)構(gòu)引用代碼組件實(shí)現(xiàn)代碼這是點(diǎn)擊時(shí)調(diào)用的方法如果當(dāng)前這個(gè)沒(méi)有旋轉(zhuǎn),那就設(shè)置旋轉(zhuǎn),視覺(jué)效果點(diǎn)擊的時(shí)候設(shè)置當(dāng)前
React實(shí)踐之Tree組件
實(shí)現(xiàn)功能
渲染數(shù)據(jù)
展開(kāi)合并
使用
數(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", } ] } ] }
引用代碼:
組件實(shí)現(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ǎn)擊?? 時(shí)調(diào)用的方法 // 如果當(dāng)前這個(gè)?? 沒(méi)有旋轉(zhuǎn),那就設(shè)置旋轉(zhuǎn),視覺(jué)效果 e.target.style.transform = e.target.style.transform == "rotate(-90deg)" ? "rotate(0deg)" : "rotate(-90deg)" for(let item in e.target.parentNode.parentNode.childNodes){ // 點(diǎn)擊的時(shí)候設(shè)置當(dāng)前層級(jí)的子元素素隱藏 // 操作了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){ // 這個(gè)是返回title,因?yàn)橛袝r(shí)候是點(diǎn)擊一個(gè)鏈接,所以設(shè)置了兩種情況,如果node節(jié)點(diǎn)里面有component這個(gè)節(jié)點(diǎn),那就設(shè)置成可以點(diǎn)擊跳轉(zhuǎn) if(item.component){ return ( {item.title} ) }else{ return ( {item.title} ) } } treeItemCroup(itemGroup) { let itemGroupItem = [] // 每個(gè)元素的樣式,根據(jù)當(dāng)前等級(jí)來(lái)設(shè)置樣式,level1的就縮緊20px,level2的縮緊40px,一次類(lèi)推,在視覺(jué)上呈現(xiàn)樹(shù)的形式 let itemStyle = { paddingLeft: 20*parseInt(itemGroup.level.slice(5), 10)+"px" } // 如果當(dāng)前節(jié)點(diǎn)還有子元素,就設(shè)置一個(gè)?? 箭頭 ,可以點(diǎn)擊展開(kāi)。 let iconChevron = classNames("fa",{"fa-chevron-down" : itemGroup.child}) // 把所有節(jié)點(diǎn)放在一個(gè)數(shù)組里面 itemGroupItem.push(
效果圖:
DOM結(jié)構(gòu)圖
代碼我加了一些注釋,可能還是比較難理清楚邏輯 ?
當(dāng)前的邏輯我覺(jué)得有點(diǎn)混亂,希望看的朋友們能給出一點(diǎn)建議,感激不盡
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/88813.html
摘要:本文用于闡述模式的算法和數(shù)學(xué)背景,以及解釋了它為什么是里最完美的狀態(tài)管理實(shí)現(xiàn)。歡迎大家討論和發(fā)表意見(jiàn)。 本文用于闡述StateUp模式的算法和數(shù)學(xué)背景,以及解釋了它為什么是React里最完美的狀態(tài)管理實(shí)現(xiàn)。 關(guān)于StateUp模式請(qǐng)參閱:https://segmentfault.com/a/11... P-State, V-State 如果要做組件的態(tài)封裝,從組件內(nèi)部看,存在兩種不同的...
摘要:在該版本發(fā)布之后,開(kāi)發(fā)團(tuán)隊(duì)并不會(huì)繼續(xù)發(fā)布新的特性,而會(huì)著眼于進(jìn)行重大的錯(cuò)誤修復(fù)。發(fā)布每六個(gè)星期,團(tuán)隊(duì)就會(huì)創(chuàng)建新的分支作為發(fā)布通道,本文即是對(duì)新近發(fā)布的版本進(jìn)行簡(jiǎn)要介紹。 showImg(https://segmentfault.com/img/remote/1460000013229009); 前端每周清單專注前端領(lǐng)域內(nèi)容,以對(duì)外文資料的搜集為主,幫助開(kāi)發(fā)者了解一周前端熱點(diǎn);分為新聞熱...
摘要:前言本文基于,主要涉及基本概念基本配置和實(shí)際項(xiàng)目打包優(yōu)化。關(guān)于概念方面參考官網(wǎng),常用配置來(lái)自于網(wǎng)絡(luò)資源,在文末有相關(guān)參考鏈接,實(shí)踐部分基于自己的項(xiàng)目進(jìn)行優(yōu)化配置。同一文件中,修改某個(gè)影響其他。 前言:本文基于weboack4.x,主要涉及webpack4 基本概念、基本配置和實(shí)際項(xiàng)目打包優(yōu)化。關(guān)于概念方面參考官網(wǎng),常用配置來(lái)自于網(wǎng)絡(luò)資源,在文末有相關(guān)參考鏈接,實(shí)踐部分基于自己的項(xiàng)目進(jìn)行...
摘要:需要注意的是,在中,需要把數(shù)據(jù)聲明為。同時(shí)還提供了運(yùn)行時(shí)的類(lèi)型安全檢查。在利用了,使異步操作可以在一個(gè)函數(shù)內(nèi)完成并且可以被追蹤。例如在中,數(shù)組并不是一個(gè),而是一個(gè)類(lèi)的對(duì)象,這是為了能監(jiān)聽(tīng)到數(shù)據(jù)下標(biāo)的賦值。 Redux是一個(gè)數(shù)據(jù)管理層,被廣泛用于管理復(fù)雜應(yīng)用的數(shù)據(jù)。但是實(shí)際使用中,Redux的表現(xiàn)差強(qiáng)人意,可以說(shuō)是不好用。而同時(shí),社區(qū)也出現(xiàn)了一些數(shù)據(jù)管理的方案,Mobx就是其中之一。 R...
摘要:表示調(diào)用棧在下一將要執(zhí)行的任務(wù)。兩方性能解藥我們一般有兩種方案突破上文提到的瓶頸將耗時(shí)高成本高易阻塞的長(zhǎng)任務(wù)切片,分成子任務(wù),并異步執(zhí)行這樣一來(lái),這些子任務(wù)會(huì)在不同的周期執(zhí)行,進(jìn)而主線程就可以在子任務(wù)間隙當(dāng)中執(zhí)行更新操作。 showImg(https://segmentfault.com/img/remote/1460000016008111); 性能一直以來(lái)是前端開(kāi)發(fā)中非常重要的話題...
閱讀 3610·2021-10-09 09:43
閱讀 6256·2021-09-07 10:15
閱讀 2804·2019-08-30 14:03
閱讀 3140·2019-08-29 11:01
閱讀 1829·2019-08-29 10:56
閱讀 1159·2019-08-28 17:52
閱讀 3562·2019-08-26 11:42
閱讀 2626·2019-08-26 10:33