Исключить пути из React Router - PullRequest
0 голосов
/ 02 марта 2020

Я использую перехватчик useLocation в React Router, чтобы отметить активную вкладку, например:

import React from "react";
import { Link, useLocation } from "react-router-dom";
import Tabs from "@material-ui/core/Tabs";
import Tab from "@material-ui/core/Tab";
import Routes from "../../../routes";

const Links = () => {

  let location = useLocation();

  return (
      <Tabs value={location.pathname}>
        {Routes.map((route, key) => {
          return (
            <Tab
              component={Link}
              to={route.path}
              label={route.label}
              key={key}
              value={route.path}
            />
          );
        })}
      </Tabs>
  );
}

И образец Routes:

import { Foo } from "../pages";

    const Routes = [
      {
        path: "/foo",
        label: "Foo",
        component: Foo
      }
    ]

Выше работало просто отлично, пока я не решил добавить боковую панель со вторичной навигацией. Чтобы различать основную и вторичную навигацию, я изменил Routes:

import { Foo, Bar } from "../pages";

const Routes = [
  {
    path: "/foo",
    label: "Foo",
    tabs: true,
    component: Foo
  },
  {
    path: "/foo/bar",
    label: "Bar",
    side: true,
    component: Bar
  },
]

Изначально на вкладках также отображалась дополнительная навигация, но это было легко преодолеть с помощью filter и map:

...snip
<Tabs value={location.pathname}>
        {Routes.filter(r => r.tab === true).map((item, key) => {
          return (
...snip

Но ссылки на боковую панель по-прежнему передаются компоненту <Tabs> через value={location.pathname}. Как я могу отфильтровать / удалить любые пути с более чем одним / из location.pathname перед назначением оставшихся свойств <Tabs> value?

Чтобы быть понятным, я только хочу передать вещи как:

/foo
/bar
/baz

, а не:

/foo/bar
/bar/foo/foo

РЕДАКТИРОВАТЬ : неуклюжее решение, которое я сейчас использую:

((location.pathname).match(/\//g)).length === 1 && location.pathname
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...