React中使用Ant Design组件库实现面包屑联动

Ant Design组件库

1.准备工作:下包

npm i react-router-dom antd --save

2. 在Ant Design中找到面包屑3.以最为基础的面包屑为例 (用哪个面包屑都无所谓自我感觉最难得是联动)

 

4.然后我们通过react-router-dom中的useLocation方法获取页面路径

import { useLocation } from 'react-router-dom'

// 获取当前路径
  let location = useLocation()  

  console.log(location)

 

5.我们有此时所在的网址,我用split 字符串切割转数组的方法

console.log(location.pathname.split('/'))

然后我们就得到一个这样的数组

 我们想让这个数组变成这样的数组 

['', '/home', '/home/role', '/home/role/node']

我们仔细观察会发现

6.我的现实方法(这个方法不是唯一的能完成数据转换就行): 

/**
 * 将数组元素逐个拼接成路径字符串并存储到结果数组中,每个新路径都是基于之前路径的前缀增加一个元素。
 * @param {Array} arr - 输入的数组,包含要拼接的元素。
 * @returns {Array} items - 返回一个新的数组,其中每个元素是一个由原数组元素按顺序拼接成的路径字符串,用'/'分隔。
 *
 * 示例:
 * 输入: [ 'a', 'b', 'c' ]
 * 输出: [ 'a', 'a/b', 'a/b/c' ]
 */

let splicingData = (arr) => {
    let items = []; // 存储拼接后的路径字符串数组
    for (let i = 0; i < arr.length; i++) {
        // 将当前数组的前i个元素拼接成一个路径,并加入到items数组中
        items.push(arr.slice(0, i + 1).join('/'));
    }
    return items; // 返回结果数组
}

export default splicingData;

 7.有了数据就正常渲染就行

/* 导航面包屑组件,用于显示当前页面在网站结构中的位置 */
    <Breadcrumb
      /* 设置面包屑组件的样式,以调整其在页面中的间距 */
      style={{
        margin: '16px 0',
      }}

      /* 通过动态生成面包屑导航项,确保每个导航项都对应于URL路径的一部分 */
      items={splicingData(location.pathname.split('/')).map((item, index) => {
        /* 使用<a>标签包裹导航项的标题,使其可点击,并链接到相应的路径 */
        return {
          title: <a href={item}>{location.pathname.split('/')[index]}</a>
        }
      })}
    >
   </Breadcrumb>

8.完整代码

import { Breadcrumb } from 'antd'
import React from 'react'
import { useLocation } from 'react-router-dom'
import splicingData from '../../uilt/splicing'

function Index() {
  // 获取当前路径
  let location = useLocation()
  return (
    /* 导航面包屑组件,用于显示当前页面在网站结构中的位置 */
    <Breadcrumb
      /* 设置面包屑组件的样式,以调整其在页面中的间距 */
      style={{
        margin: '16px 0',
      }}

      /* 通过动态生成面包屑导航项,确保每个导航项都对应于URL路径的一部分 */
      items={splicingData(location.pathname.split('/')).map((item, index) => {
        /* 使用<a>标签包裹导航项的标题,使其可点击,并链接到相应的路径 */
        return {
          title: <a href={item}>{location.pathname.split('/')[index]}</a>
        }
      })}
    >
    </Breadcrumb>
  )
}

export default Index

别忘了咱们封装的数据方法

/**
 * 将数组元素逐个拼接成路径字符串并存储到结果数组中,每个新路径都是基于之前路径的前缀增加一个元素。
 * @param {Array} arr - 输入的数组,包含要拼接的元素。
 * @returns {Array} items - 返回一个新的数组,其中每个元素是一个由原数组元素按顺序拼接成的路径字符串,用'/'分隔。
 *
 * 示例:
 * 输入: [ 'a', 'b', 'c' ]
 * 输出: [ 'a', 'a/b', 'a/b/c' ]
 */

let splicingData = (arr) => {
    let items = []; // 存储拼接后的路径字符串数组
    for (let i = 0; i < arr.length; i++) {
        // 将当前数组的前i个元素拼接成一个路径,并加入到items数组中
        items.push(arr.slice(0, i + 1).join('/'));
    }
    return items; // 返回结果数组
}

export default splicingData;

这样就能实现面包屑的数据联动了 

一定要记住代码不是唯一的不要死记硬背代码重在理解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值