reactjs - 带有 React Router 的 MUI 面包屑 - 自定义面包屑标签
问题描述
在这里,我在面包屑上使用 MUI 和 React 路由器的实现。
import React from "react";
import {
Breadcrumbs as AppBreadcrumbs,
Link,
Typography,
} from "@material-ui/core";
import { withRouter } from "react-router-dom";
const Breadcrumbs = (props) => {
const {
history,
location: { pathname },
} = props;
const pathnames = pathname.split("/").filter((x) => x);
return (
<AppBreadcrumbs aria-label="breadcrumb">
<Link onClick={() => history.push("/")}>Home</Link>
{pathnames.map((name, index) => {
const goTo = `/${pathnames.slice(0, index + 1).join("/")}`;
const active = index === pathnames.length - 1;
return active ? (
<Typography>{name}</Typography>
) : (
<Link onClick={() => history.push(goTo)}>{name}</Link>
);
})}
</AppBreadcrumbs>
);
};
export default withRouter(Breadcrumbs);
一切都按预期工作,但面包屑的标签有问题。我有这 3 个页面,它们的链接如下:"book-table"
, "food-delivery"
,"sponsor"
这就是它们在我的页面上的显示方式:
Home / book-table
Home / food-delivery
Home / sponsor
我怎样才能像这样为每个面包屑定制标签?如果它在book-table
页面上,它将显示如下:Home / Book a Table
。如果它打开food-delivery
,它将显示如下:Home / Order Food
等等。
解决方案
由于没有可用于转换路径名的明确模式,我建议创建一个配置对象并对其进行迭代,例如:
const routes = [{
path: '/book-table',
title: 'Book Table'
}]
return routers.map(x => return <SomeBreadcumb route={x.route}>{x.title}</SomeBreadcumb>)
这样你的代码会更干净、更易读、更易于维护。例如:您可能希望根据用户的语言偏好更改标题,这样会比您决定采用的方法更容易。
希望有帮助
推荐阅读
- qt - 如何将渐变设置为 QML TreeView 背景?
- python - python - 尝试使用 Apache 和 mod_wsgi 运行 Django 应用程序时,request.get("https://www.example.com") 不起作用
- python - 我完成了文档上的所有说明,但我仍然收到此错误
- android - 无法将 twitter SDK 3.3.0 添加到 Android Studio 3.1 项目
- arrays - Perl:使用数组列表来选择特定的列
- javascript - Adding a utf-8 font to jsPDF library to print utf-8 Arabic pdfs in Angular application
- buffer-overflow - 返回 libc- 缓冲区溢出
- c# - 在绘制的点之间绘制一条线
- python-3.x - 语法错误 def __repr__(self)
- c# - C# ComboBox get Key and Text in autocomplete