最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2024年10月30日 08:30:36   作者:omijer  
在一些react項(xiàng)目中,常常有一些需要目錄樹這種結(jié)構(gòu),這篇文章主要為大家介紹了如何使用遞歸組件實(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 父組件與子組件之間的值傳遞的方法

    react 父組件與子組件之間的值傳遞的方法

    本篇文章主要介紹了react 父組件與子組件之間的值傳遞的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-09-09
  • React實(shí)現(xiàn)卡片拖拽效果流程詳解

    React實(shí)現(xiàn)卡片拖拽效果流程詳解

    這篇文章主要介紹了React Web開發(fā)實(shí)戰(zhàn)示例,實(shí)現(xiàn)卡片拖拽效果,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-11-11
  • React學(xué)習(xí)之受控組件與數(shù)據(jù)共享實(shí)例分析

    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)

    本文主要介紹了React?組件權(quán)限控制的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • React組件與事件的創(chuàng)建使用教程

    React組件與事件的創(chuàng)建使用教程

    react事件綁定時(shí)。this并不會(huì)指向當(dāng)前DOM元素。往往使用bind來改變this指向,今天通過本文給大家介紹React事件綁定的方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-02-02
  • ReactNative-JS 調(diào)用原生方法實(shí)例代碼

    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í)施表單的流程步驟

    這篇文章主要介紹了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)度條效果

    本篇文章通過完整的代碼給大家介紹了react-player實(shí)現(xiàn)視頻播放與自定義進(jìn)度條效果,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2022-01-01
  • React的setState批量更新機(jī)制詳解

    React的setState批量更新機(jī)制詳解

    React 的 setState 批量更新是 React 優(yōu)化性能的重要機(jī)制,它通過減少不必要的渲染次數(shù)來提高應(yīng)用性能,下面我將詳細(xì)解釋這一過程,需要的朋友可以參考下
    2025-05-05
  • 詳解React setState數(shù)據(jù)更新機(jī)制

    詳解React setState數(shù)據(jù)更新機(jī)制

    這篇文章主要介紹了React setState數(shù)據(jù)更新機(jī)制的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用React框架,感興趣的朋友可以了解下
    2021-04-04

最新評(píng)論

舞钢市| 溧阳市| 靖安县| 天全县| 吉首市| 南雄市| 东辽县| 察雅县| 日照市| 南城县| 濮阳市| 林周县| 岳西县| 云阳县| 夏河县| 进贤县| 龙口市| 桃源县| 喀喇沁旗| 城口县| 名山县| 崇信县| 诏安县| 屏南县| 视频| 科技| 乐至县| 内黄县| 郎溪县| 环江| 嵩明县| 龙里县| 固阳县| 金沙县| 灌云县| 湾仔区| 镇远县| 龙口市| 城口县| 金平| 武鸣县|