亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

react遞歸組件實現(xiàn)樹的示例詳解

 更新時間:2024年10月30日 08:30:36   作者:omijer  
在一些react項目中,常常有一些需要目錄樹這種結(jié)構(gòu),這篇文章主要為大家介紹了如何使用遞歸組件實現(xiàn)樹,感興趣的小伙伴可以了解下

需求點

在一些react項目中,常常有一些需要目錄樹這種結(jié)構(gòu),在很多ui組件庫中都有實現(xiàn),但不知道實現(xiàn)的方式,下面可以根據(jù)遞歸組件來實現(xiàn)樹的操作

具體實現(xiàn)

1.數(shù)據(jù)結(jié)構(gòu)定義

可以將組件的數(shù)據(jù)定義如下,其中key代表當(dāng)前的節(jié)點key; content代表節(jié)點的內(nèi)容;children代表子節(jié)點,子節(jié)點的數(shù)據(jù)結(jié)構(gòu)與父節(jié)點一致

export type TreeProps = {
    key: string;
    content: React.ReactNode;
    children: TreeProps[];
};

2.實現(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>
            {/* 如果子組件存在多個元素,就進行遞歸調(diào)用item子組件,不斷渲染其內(nèi)容 */}
            {item.children.length > 0 && (
            <>
                {item.children.map((child) => {
                    return <TreeItem item={child} key={child.key} />;
                })}
            </>
            )}
        </div>
    );
};

export default Tree;

可以看到效果如下

可以看到基本上實現(xiàn)了文件樹的結(jié)構(gòu),下面我們實現(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>
            {/* 如果子組件存在多個元素,就進行遞歸調(diào)用item子組件,不斷渲染其內(nèi)容 */}
            {item.children.length > 0 && isOpen && (
            <>
            {item.children.map((child) => {
                return <TreeItem item={child} key={child.key} />;
             })}
            </>
        )}
        </div>
    );
};

實現(xiàn)效果

總結(jié)

使用遞歸組件的方式實現(xiàn)了樹組件,了解其作用原理

在子組件內(nèi)部實現(xiàn)其展開與關(guān)閉操作,可以避免在一些組件操作的時候,更新整個組件,提升了一定的性能

以上就是react遞歸組件實現(xiàn)樹的示例詳解的詳細(xì)內(nèi)容,更多關(guān)于react樹的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • React中使用外部樣式的3種方式(小結(jié))

    React中使用外部樣式的3種方式(小結(jié))

    這篇文章主要介紹了React中使用外部樣式的3種方式(小結(jié)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • React如何實現(xiàn)視頻旋轉(zhuǎn)縮放

    React如何實現(xiàn)視頻旋轉(zhuǎn)縮放

    這篇文章主要為大家詳細(xì)介紹了React如何實現(xiàn)視頻旋轉(zhuǎn)縮放功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-11-11
  • React中的函數(shù)式插槽詳解

    React中的函數(shù)式插槽詳解

    這篇文章主要為大家詳細(xì)介紹了React?開發(fā)中遇到的具名插槽的函數(shù)用法,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價值,有興趣的小伙伴可以了解一下
    2023-11-11
  • react項目中express動態(tài)路由未能匹配造成的404問題解決

    react項目中express動態(tài)路由未能匹配造成的404問題解決

    本文主要介紹了react項目中express動態(tài)路由未能匹配造成的404問題解決,解決了白屏的問題,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • 關(guān)于react useState更新異步問題

    關(guān)于react useState更新異步問題

    這篇文章主要介紹了關(guān)于react useState更新異步問題,具有很好的參考價值,希望對大家有所幫助。以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

    2022-08-08
  • 基于React封裝一個驗證碼輸入控件

    基于React封裝一個驗證碼輸入控件

    郵箱、手機驗證碼輸入是許多在線服務(wù)和網(wǎng)站常見的安全驗證方式之一,本文主要來和大家討論一下如何使用React封裝一個驗證碼輸入控件,感興趣的可以了解下
    2024-03-03
  • React?組件性能最佳優(yōu)化實踐分享

    React?組件性能最佳優(yōu)化實踐分享

    這篇文章主要介紹了React組件性能最佳優(yōu)化實踐分享,React組件性能優(yōu)化的核心是減少渲染真實DOM節(jié)點的頻率,減少Virtual?DOM比對的頻率,更多相關(guān)內(nèi)容需要的朋友可以參考一下
    2022-09-09
  • 使用ReactJS實現(xiàn)tab頁切換、菜單欄切換、手風(fēng)琴切換和進度條效果

    使用ReactJS實現(xiàn)tab頁切換、菜單欄切換、手風(fēng)琴切換和進度條效果

    這篇文章主要介紹了使用ReactJS實現(xiàn)tab頁切換、菜單欄切換、手風(fēng)琴切換和進度條效果的相關(guān)資料,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2016-10-10
  • React?之?Suspense提出的背景及使用詳解

    React?之?Suspense提出的背景及使用詳解

    這篇文章主要為大家介紹了React?之?Suspense提出的背景及使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • react如何向數(shù)組中追加值

    react如何向數(shù)組中追加值

    這篇文章主要介紹了react如何向數(shù)組中追加值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09

最新評論