性能示例展现:
官网示例:
封装实现的示例:
技术栈:JS+TS+React+React节点克隆+React组件通信
面包屑导航作用就是标识以后在那个路由页面
面包屑导航应用办法如下:
import Breadcrumb from '@/components/Breadcrumb'const Article = () => { return <div> // separator:分隔符 <Breadcrumb separator='/'> <Breadcrumb.Item>首页</Breadcrumb.Item> <Breadcrumb.Item>内容治理</Breadcrumb.Item> </Breadcrumb> </div >}export default Article
自定义面包屑导航Breadcrumb的代码
import React from 'react'import BreadcrumbItem from '../BreadcrumbItem'interface PropsType { children: JSX.Element | JSX.Element[] separator?: string}const Breadcrumb = (props: PropsType): JSX.Element => { const { separator, children } = props /* 为什么要克隆children? 如果不克隆children,那么separator是Breadcrumb组件属性的话,是无奈 传递给BreadcrumbItem组件,导致BreadcrumbItem没有分隔符 */ // React.Children.map用来遍历 ReactNode元素 // 将所有childred遍历,将element克隆,并且给新的element加上separator( 分隔符 ) // React.Children.map返回一个新的ReactNode数组,将新的渲染 const BreadcrumbItemList = React.Children.map(children, ((element, index) => { if (children instanceof Array) { if ((children.length - 1) === index) { return React.cloneElement(element) } return React.cloneElement(element, { separator: separator ? separator : '>' }) } })) return <div className='breadcrumb'> {BreadcrumbItemList} </div>}Breadcrumb.Item = BreadcrumbItemexport default Breadcrumb
面包屑导航BreadcrumbItem的代码
interface ItemType { className?: string href?: string onClick?(): void children: any title?: string, separator?: string}const BreadcrumbItem = ({ className, href, onClick, children, title, separator }: ItemType) => { const click = () => { href && navigate(`${href}`) } return ( <div className={classNames([className, 'breadcrumb-item'])} onClick={onClick || click} > {title} {children} // 除了最初一个item,其余的都有separator分隔符,这样就实现了面包屑导航栏 {separator} </div> )}export default BreadcrumbItem