欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

react遞歸組件實現樹的示例詳解

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

需求點

在一些react項目中,常常有一些需要目錄樹這種結構,在很多ui組件庫中都有實現,但不知道實現的方式,下面可以根據遞歸組件來實現樹的操作

具體實現

1.數據結構定義

可以將組件的數據定義如下,其中key代表當前的節(jié)點key; content代表節(jié)點的內容;children代表子節(jié)點,子節(jié)點的數據結構與父節(jié)點一致

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

2.實現組件

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

export default Tree;

可以看到效果如下

可以看到基本上實現了文件樹的結構,下面我們實現反轉的功能

下載antd的圖標庫

npm install --save @ant-design/icons

在TreeItem組件中增加狀態(tài)控制樹的展開與關閉

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

實現效果

總結

使用遞歸組件的方式實現了樹組件,了解其作用原理

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

以上就是react遞歸組件實現樹的示例詳解的詳細內容,更多關于react樹的資料請關注腳本之家其它相關文章!

相關文章

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

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

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

    React如何實現視頻旋轉縮放

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

    React中的函數式插槽詳解

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

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

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

    關于react useState更新異步問題

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

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

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

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

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

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

    使用ReactJS實現tab頁切換、菜單欄切換、手風琴切換和進度條效果

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

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

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

    react如何向數組中追加值

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

最新評論