react遞歸組件實(shí)現(xiàn)樹的示例詳解
需求點(diǎn)
在一些react項(xiàng)目中,常常有一些需要目錄樹這種結(jié)構(gòu),在很多ui組件庫中都有實(shí)現(xiàn),但不知道實(shí)現(xiàn)的方式,下面可以根據(jù)遞歸組件來實(shí)現(xiàn)樹的操作
具體實(shí)現(xiàn)
1.數(shù)據(jù)結(jié)構(gòu)定義
可以將組件的數(shù)據(jù)定義如下,其中key代表當(dāng)前的節(jié)點(diǎn)key; content代表節(jié)點(diǎn)的內(nèi)容;children代表子節(jié)點(diǎn),子節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)與父節(jié)點(diǎn)一致
export type TreeProps = {
key: string;
content: React.ReactNode;
children: TreeProps[];
};
2.實(shí)現(xiàn)組件
import { fakeData } from "./constant";
import { TreeProps } from "./type";
import "./tree.css";
const Tree = () => {
return (
<div>
{fakeData.map((item) => {
return <TreeItem item={item} key={item.key} />;
})}
</div>
);
};
const TreeItem = ({ item }: { item: TreeProps }) => {
return (
<div className="tree-item">
<div className="content">{item.content}</div>
{/* 如果子組件存在多個(gè)元素,就進(jìn)行遞歸調(diào)用item子組件,不斷渲染其內(nèi)容 */}
{item.children.length > 0 && (
<>
{item.children.map((child) => {
return <TreeItem item={child} key={child.key} />;
})}
</>
)}
</div>
);
};
export default Tree;
可以看到效果如下

可以看到基本上實(shí)現(xiàn)了文件樹的結(jié)構(gòu),下面我們實(shí)現(xiàn)反轉(zhuǎn)的功能
下載antd的圖標(biāo)庫
npm install --save @ant-design/icons
在TreeItem組件中增加狀態(tài)控制樹的展開與關(guān)閉
const TreeItem = ({ item }: { item: TreeProps }) => {
const [isOpen, setIsOpen] = useState(false);
return (
<div className="tree-item">
<div className="content" onClick={() => setIsOpen(!isOpen)}>
<>
{item.children.length > 0 ? (
<>
{isOpen ? (
<DownOutlined style={styles} />
) : (
<RightOutlined style={styles} />
)}
</>
) : (
<LineOutlined style={styles} />
)}
</>
<div>{item.content}</div>
</div>
{/* 如果子組件存在多個(gè)元素,就進(jìn)行遞歸調(diào)用item子組件,不斷渲染其內(nèi)容 */}
{item.children.length > 0 && isOpen && (
<>
{item.children.map((child) => {
return <TreeItem item={child} key={child.key} />;
})}
</>
)}
</div>
);
};
實(shí)現(xiàn)效果

總結(jié)
使用遞歸組件的方式實(shí)現(xiàn)了樹組件,了解其作用原理
在子組件內(nèi)部實(shí)現(xiàn)其展開與關(guān)閉操作,可以避免在一些組件操作的時(shí)候,更新整個(gè)組件,提升了一定的性能
以上就是react遞歸組件實(shí)現(xiàn)樹的示例詳解的詳細(xì)內(nèi)容,更多關(guān)于react樹的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
React學(xué)習(xí)之受控組件與數(shù)據(jù)共享實(shí)例分析
這篇文章主要介紹了React學(xué)習(xí)之受控組件與數(shù)據(jù)共享,結(jié)合實(shí)例形式分析了React受控組件與組件間數(shù)據(jù)共享相關(guān)原理與使用技巧,需要的朋友可以參考下2020-01-01
React?組件權(quán)限控制的實(shí)現(xiàn)
本文主要介紹了React?組件權(quán)限控制的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02
ReactNative-JS 調(diào)用原生方法實(shí)例代碼
這篇文章主要介紹了ReactNative-JS 調(diào)用原生方法實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2016-10-10
React中重新實(shí)現(xiàn)強(qiáng)制實(shí)施表單的流程步驟
這篇文章主要介紹了React中重新實(shí)現(xiàn)強(qiáng)制實(shí)施表單的流程步驟,就像設(shè)計(jì)人員一樣,在添加邏輯之前,您需要為不同的狀態(tài)“模擬”或創(chuàng)建“模擬”,例如,這里只是表單的視覺部分的模擬,文中通過代碼示例講解的非常詳細(xì),需要的朋友可以參考下2024-05-05
react-player實(shí)現(xiàn)視頻播放與自定義進(jìn)度條效果
本篇文章通過完整的代碼給大家介紹了react-player實(shí)現(xiàn)視頻播放與自定義進(jìn)度條效果,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2022-01-01
詳解React setState數(shù)據(jù)更新機(jī)制
這篇文章主要介紹了React setState數(shù)據(jù)更新機(jī)制的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用React框架,感興趣的朋友可以了解下2021-04-04

