微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在React Router Breadcrumb组件中重命名URL名称

如何解决在React Router Breadcrumb组件中重命名URL名称

我是React的新手,我正在尝试构建一个动态面包屑React组件,该组件可以检测到我在网站上的位置并进行显示。 这是我在此YouTube link中尝试过的代码

import React from “react”;
import {
  Breadcrumbs as MUIBreadcrumbs,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 (
    <MUIBreadcrumbs aria-label=“breadcrumb”>
      {pathnames.length > 0 ? (
        <Link onClick={() => history.push(“/”)}>Home</Link>
      ) : (
        <Typography> Home </Typography>
      )}
      {pathnames.map((name,index) => {
        const routeto = `/${pathnames.slice(0,index + 1).join(“/”)}`;
        const isLast = index === pathnames.length - 1;
        return isLast ? (
          <Typography key={name}>{name}</Typography>
        ) : (
          <Link key={name} onClick={() => history.push(routeto)}>
            {name}
          </Link>
        );
      })}
    </MUIBreadcrumbs>
  );
};

export default withRouter(Breadcrumbs);

代码对我来说很好用,但是我希望面包屑到达页面显示特定的文本,例如,关于页面的网址是“ / about”,并且我想在面包屑上显示为“关于我们这样的:

首页/关于我们

我该怎么办?

解决方法

您可以检查URL的名称,如果它与“ about”匹配,则可以说应将“ About Us”作为输出。这可能不是100%完美的解决方案,但它会像这样工作:

{pathnames.map((name,index) => {
  const routeTo = `/${pathnames.slice(0,index + 1).join("/")}`;
  const isLast = index === pathnames.length - 1;
  return isLast ? (
    <Typography key={name}>
      { // change this line to this: }
      {name === "about" ? "About Us" : name}
    </Typography>
  ) : (
  <Link key={name} onClick={() => history.push(routeTo)}>
    {name}
  </Link>
  );
})}

如果路径为“关于”,则会显示“关于我们”而不是“关于”。对于其他情况,它将输出路径名。

如果要对多个页面执行此操作,则可以创建一个对象(在本例中称为“页面”),该对象的键为路径名,然后为其分配所需的值。像这样:

{pathnames.map((name,index + 1).join("/")}`;
  const isLast = index === pathnames.length - 1;
  const pages = { 'about': 'About Us','contact': 'Contact Us' };
  return isLast ? (
    <Typography key={name}>
      {pages[name]}
    </Typography>
  ) : (
    <Link key={name} onClick={() => history.push(routeTo)}>
      {name}
    </Link>
  );
})}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。