国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

react17+antd4.18 動態(tài)實(shí)現(xiàn)面包屑導(dǎo)航Breadcrumb-----需改善

這篇具有很好參考價值的文章主要介紹了react17+antd4.18 動態(tài)實(shí)現(xiàn)面包屑導(dǎo)航Breadcrumb-----需改善。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1、已經(jīng)定義好的全部的路由配置,需要是這種格式的,可以再加上關(guān)于icon的內(nèi)容.

const routerMap = [
    {
        path: '/home',
        breadcrumbName: 'Home',
    },
    {
        path: '/page1',
        breadcrumbName: 'Page 1',
        children: [
            {
                path: '/page1/page101',
                breadcrumbName: 'Page 101',
                children: [
                    {
                        path: '/page1/page101/page10101',
                        breadcrumbName: 'Page 10101',
                    }, {
                        path: '/page1/page101/page10102',
                        breadcrumbName: 'Page 10102',
                    }
                ]
            }, {
                path: '/page1/page102',
                breadcrumbName: 'Page 102',
                children: [
                    {
                        path: '/page1/page102/page10201',
                        breadcrumbName: 'Page 10201',
                    }, {
                        path: '/page1/page102/page10202',
                        breadcrumbName: 'Page 10202',
                    }
                ]
            }
        ]
    }
]

2、代碼

import React, { Component } from 'react'
import { Breadcrumb } from 'antd'
import { Link } from 'react-router-dom'
//1、已經(jīng)定義好的全部的路由配置,需要是這種格式的,可以再加上關(guān)于icon的內(nèi)容
const routerMap = [
    {
        path: '/home',
        breadcrumbName: 'Home',
    },
    {
        path: '/page1',
        breadcrumbName: 'Page 1',
        children: [
            {
                path: '/page1/page101',
                breadcrumbName: 'Page 101',
                children: [
                    {
                        path: '/page1/page101/page10101',
                        breadcrumbName: 'Page 10101',
                    }, {
                        path: '/page1/page101/page10102',
                        breadcrumbName: 'Page 10102',
                    }
                ]
            }, {
                path: '/page1/page102',
                breadcrumbName: 'Page 102',
                children: [
                    {
                        path: '/page1/page102/page10201',
                        breadcrumbName: 'Page 10201',
                    }, {
                        path: '/page1/page102/page10202',
                        breadcrumbName: 'Page 10202',
                    }
                ]
            }
        ]
    }
]
export default class Bread extends Component {
    state = {
        breadCrumb: [],//Breadcrumb.Item項(xiàng)數(shù)組
    }
    componentDidMount() {
        this.renderBreadcrumbItems()
    }
    //2、根據(jù)全部的路由配置和當(dāng)前頁面的路徑篩選得到一個數(shù)組,這個數(shù)組是當(dāng)前頁面路徑所對應(yīng)的路由配置
    /* 對路由配置的每一項(xiàng)path與currentPath進(jìn)行判斷:
    先判斷是否相等:
            相等:把該項(xiàng)的配置添加進(jìn)routes數(shù)組中,包括path、breadcrumbName。
            不相等:再判斷當(dāng)前頁面路徑currentPath是否是以當(dāng)前路徑開頭。
                    若是:證明currentPath在他的children中,把該項(xiàng)的路由配置添加進(jìn)routes數(shù)組中,包括path、breadcrumbName、children的內(nèi)容為遞歸調(diào)用函數(shù),傳入當(dāng)前項(xiàng)的children為參數(shù)。
                    若不是:直接進(jìn)行下一項(xiàng)。
    
    得到的數(shù)組需要進(jìn)行翻轉(zhuǎn)
    */
    getRoutesList = () => {
        const currentPath = this.props.pathname;//當(dāng)前頁面的路徑
        const routes = [];//符合當(dāng)前路徑過程的路由配置數(shù)組
        // 閉包
        function fn(data) {
            data.forEach(item => {
                //先判相等 再判開頭
                if (item.path === currentPath) {
                    //相等
                    routes.push({ path: item.path, breadcrumbName: item.breadcrumbName })
                } else {
                    if (currentPath.startsWith(item.path)) {
                        //不相等,但是是他的children
                        routes.push({ path: item.path, breadcrumbName: item.breadcrumbName, children: fn(item.children) })
                    }
                }

            })
        }
        fn(routerMap)
        return routes.reverse() //注意:這里要進(jìn)行數(shù)組翻轉(zhuǎn)
    }

    //3、根據(jù)篩選后的路由配置渲染Breadcrumb.Item:如果是最后一項(xiàng)則直接渲染文字文字內(nèi)容,不是最后一項(xiàng)要渲染鏈接。
    renderBreadcrumbItems = () => {
        const routes = this.getRoutesList()
        const currentPath = this.props.pathname
        let breadCrumb = []
        const bread = (data) => {
            data.forEach(item => {
                const { path, breadcrumbName, children } = item;
                //判斷是否是最后一項(xiàng)
                const isLast = path === currentPath  //true最后一項(xiàng)渲染文字,false渲染鏈接
                const i = <Breadcrumb.Item key={path}>
                    {isLast ? <span>{breadcrumbName}</span> : <Link to={path}>{breadcrumbName}</Link>}
                </Breadcrumb.Item>
                breadCrumb.push(i)
                if (children) {
                    bread(children)
                }
            })
        }
        bread(routes)
        this.setState({
            breadCrumb
        })
    }
    render() {
        return (
            <div>
                <Breadcrumb>
                    {this.state.breadCrumb}
                </Breadcrumb>
            </div>
        )
    }
}

3、在組件中使用的時候需要傳入當(dāng)前頁面的路勁發(fā)作為Bread組件的屬性。

<Bread pathname={this.props.location.pathname}></Bread>

4、假設(shè)當(dāng)前頁面的路徑為 ‘/page1/page102/page10201’,經(jīng)過上述操作篩選后得到的對應(yīng)路徑上的路由配置routes的值為:

routs=[
      {path: '/page1', breadcrumbName: 'Page 1', children: undefined},
      {path: '/page1/page102', breadcrumbName: 'Page 102', children: undefined},
      {path: '/page1/page102/page10201', breadcrumbName: 'Page 10201'}
]

5、關(guān)于startWith:
startsWith 是 JavaScript 中一個字符串方法,用于檢測一個字符串是否以指定的子串開頭。如果是,則返回 true;如果不是,則返回 false。

這個方法對于構(gòu)建面包屑導(dǎo)航或任何需要判斷路徑是否以特定前綴開始的場景都非常有用。

const str = 'Hello, world!';  
const prefix = 'Hello';  
  
if (str.startsWith(prefix)) {  
  console.log('The string starts with "Hello".');  
} else {  
  console.log('The string does not start with "Hello".');  
}  
// 輸出:The string starts with "Hello".

在路由匹配的上下文中,startsWith 可以用來檢查當(dāng)前路徑是否以某個路由的路徑開始。如果是這樣,那么就可以認(rèn)為該路由是當(dāng)前路徑的一個匹配項(xiàng),并可能將其添加到面包屑導(dǎo)航中。

例如,如果你有一個路由對象,其 path 屬性為 /home/profile,并且當(dāng)前路徑是 /home/profile/settings,那么調(diào)用 currentPath.startsWith(route.path) 將返回 true,因?yàn)楫?dāng)前路徑確實(shí)以路由的路徑開始。文章來源地址http://www.zghlxwxcb.cn/news/detail-858075.html

到了這里,關(guān)于react17+antd4.18 動態(tài)實(shí)現(xiàn)面包屑導(dǎo)航Breadcrumb-----需改善的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 若依 vue前端 動態(tài)設(shè)置路由path不同參數(shù) 在頁面容器里打開新頁面(新路由),面包屑和標(biāo)簽頁標(biāo)題根據(jù)參數(shù)動態(tài)改變,面包屑多級標(biāo)題,側(cè)邊欄對應(yīng)菜單亮起

    若依 vue前端 動態(tài)設(shè)置路由path不同參數(shù) 在頁面容器里打開新頁面(新路由),面包屑和標(biāo)簽頁標(biāo)題根據(jù)參數(shù)動態(tài)改變,面包屑多級標(biāo)題,側(cè)邊欄對應(yīng)菜單亮起

    因?yàn)槭窃趘ue源碼的基礎(chǔ)上進(jìn)行修改,所以,就沒有復(fù)制代碼在文章上,采取的是截圖對比源碼和我修改的代碼片段。要麻煩你們自己手敲了。 場景:在費(fèi)用配置列表中,點(diǎn)擊每一項(xiàng)的配置,都會在頁面容器內(nèi)部打開一個新頁面,所以新頁面的路徑一樣,根據(jù)傳的參數(shù)不同,面

    2024年01月16日
    瀏覽(28)
  • Vue實(shí)現(xiàn)面包屑功能(el-breadcrumb)

    Vue實(shí)現(xiàn)面包屑功能(el-breadcrumb)

    文章后面附效果圖 數(shù)據(jù)結(jié)構(gòu) 首先展示一下數(shù)據(jù)基礎(chǔ)結(jié)構(gòu) 紅色框框是默認(rèn)存在的數(shù)據(jù),其他數(shù)據(jù)就是通過選中側(cè)邊欄菜單進(jìn)行數(shù)據(jù)插入 關(guān)鍵數(shù)據(jù)字段為 path, meta 準(zhǔn)備側(cè)邊欄 首先需要自己準(zhǔn)備一個側(cè)邊欄 這邊就不進(jìn)行講解,上個效果圖 實(shí)現(xiàn)面包屑代碼 效果圖

    2024年02月11日
    瀏覽(20)
  • js面包屑,如何制作面包屑,什么是面包屑,又如何去理解面包屑是什么呢,對于不會應(yīng)該怎么辦呢?這篇文章告訴你。

    js面包屑,如何制作面包屑,什么是面包屑,又如何去理解面包屑是什么呢,對于不會應(yīng)該怎么辦呢?這篇文章告訴你。

    ??博主:鍋蓋噠 ??文章核心: 帶你了解原生js面包屑框架 目錄大綱 1.面包屑的概念與框架地址 2.功能框架預(yù)覽于介紹 框架效果預(yù)覽: 頁面架構(gòu)代碼預(yù)覽: HTML頁面預(yù)覽: ?權(quán)限驗(yàn)證介紹 3.面包屑的邏輯 ?下面就是面包屑邏輯 1.首先從login頁面進(jìn)入拿到渲染左側(cè)列表的值 2

    2024年02月14日
    瀏覽(38)
  • 【前端版】分布式醫(yī)療云平臺【解決面包屑的問題、定義路由、服務(wù)端接口、動態(tài)渲染菜單、登陸測試、字典類型管理 】(二十)

    目錄 2.3.解決其它問題 2.3.1.面包屑的問題及控制臺報(bào)錯 3.登陸和加載菜單和后臺關(guān)聯(lián)問題?

    2024年02月12日
    瀏覽(23)
  • 面包屑導(dǎo)航是什么?面包屑導(dǎo)航為什么能夠提高SEO?

    面包屑導(dǎo)航(Breadcrumb Navigation)是一種網(wǎng)站的導(dǎo)航方式,通常用于顯示訪問路徑。它的名稱來自童話故事《漢賽爾和格蕾特》中的場景,其中漢賽爾在森林中留下了面包屑,以便他們回到家。 在Web設(shè)計(jì)中,面包屑導(dǎo)航通常位于頁面頂部或正文區(qū)域的頁眉下方。它通常由多個鏈

    2024年02月13日
    瀏覽(23)
  • vue-router + element-plus實(shí)現(xiàn)面包屑導(dǎo)航欄和路由標(biāo)簽欄

    vue-router + element-plus實(shí)現(xiàn)面包屑導(dǎo)航欄和路由標(biāo)簽欄

    首先,先解釋一下什么是面包屑導(dǎo)航欄和路由標(biāo)簽欄。 如下圖所示,面包屑導(dǎo)航欄就是展示當(dāng)前所處路由信息和父輩路由信息的導(dǎo)航欄,它的作用是提示用戶當(dāng)前頁面所在位置;路由標(biāo)簽欄就類似于瀏覽器的標(biāo)簽欄,每個標(biāo)簽對應(yīng)一個路由頁面,點(diǎn)擊該標(biāo)簽可以進(jìn)入該路由頁

    2023年04月23日
    瀏覽(24)
  • 自制Breadcrumb 面包屑

    自制Breadcrumb 面包屑

    使用場景: 當(dāng)系統(tǒng)擁有超過兩級以上的層級結(jié)構(gòu)時 當(dāng)需要告知用戶『你在哪里』時 當(dāng)需要向上導(dǎo)航的功能時

    2024年01月19日
    瀏覽(21)
  • UI組件-面包屑簡介

    UI組件-面包屑簡介

    設(shè)計(jì)世界充滿了與食物相關(guān)的類比,例如漢堡菜單、Snackbars或面包屑。面包屑或面包屑路徑是一種導(dǎo)航元素,可幫助用戶了解他們在網(wǎng)站上的當(dāng)前位置。 1. 定義: 它們代表鏈接的水平列表,其中最后一個表示當(dāng)前位置,其余定義其“祖先”(父頁面、祖父頁面等)。面包屑

    2024年02月06日
    瀏覽(18)
  • vue修改element面包屑樣式

    vue修改element面包屑樣式

    element面包屑默認(rèn)后邊的是淺顏色的,前邊的是深色的, 現(xiàn)在UI設(shè)計(jì)圖要修改成前面是淺色的,后面是深色的 如果直接修改樣式會無法區(qū)分一級或者二級路由,用一下方法可以實(shí)現(xiàn): 這樣就會給一級路由加上了first_route類名,給二級路由加上了two_route的類名,然后定義樣式:

    2024年01月25日
    瀏覽(16)
  • ElementUI淺嘗輒止29:Breadcrumb 面包屑

    顯示當(dāng)前頁面的路徑,快速返回之前的任意頁面。 在 el-breadcrumb 中使用 el-breadcrumb-item 標(biāo)簽表示從首頁開始的每一級。Element 提供了一個 separator 屬性,在 el-breadcrumb 標(biāo)簽中設(shè)置它來決定分隔符,它只能是字符串,默認(rèn)為斜杠 / 。 通過設(shè)置? separator-class ?可使用相應(yīng)的? icon

    2024年02月09日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包