Я использую один и тот же компонент для трех разных маршрутов:
<Router>
<Route path="/home" component={Home} />
<Route path="/users" component={Home} />
<Route path="/widgets" component={Home} />
</Router>
Есть ли способ совместить это, чтобы быть как:
<Router>
<Route path=["/home", "/users", "/widgets"] component={Home} />
</Router>
javascript
reactjs
path
react-router
url-routing
Четан Гарг
источник
источник
Ответы:
Начиная с response -router v4.4.0-beta.4 и официально в v5.0.0, теперь вы можете указать массив путей, которые разрешаются к компоненту, например
Каждый путь в массиве представляет собой строку регулярного выражения.
Документацию по этому подходу можно найти здесь .
источник
exact
атрибут для одного пути?yarn upgrade
с 4.3 на 4.4. Он официально выпущен?По крайней мере, с response-router v4 это
path
может быть строка регулярного выражения, поэтому вы можете сделать что-то вроде этого:Как видите, это немного многословно, поэтому, если ваш
component
/route
такой простой, вероятно, этого не стоит.И, конечно, если это действительно часто возникает, вы всегда можете создать компонент- оболочку, который принимает
paths
параметр массива , который.map
повторно использует регулярное выражение или логику.источник
/^\/(home|users|widgets)/
Теперь/widgets
будет совпадать, но/dashboard/widgets
не совпадать.Warning: Failed prop type: Invalid prop
свойств : путь` типа,regexp
предоставленногоRoute
, ожидаетсяstring
.`<Route path="/(new|edit)/user/:id?" ... />
path={`/(${ROUTES.HOME}|${ROUTES.HOME_1})/`}
Я не думаю, что это так, если вы используете версию React Router ниже v4.
Вы можете использовать a,
map
как и любой другой компонент JSX:РЕДАКТИРОВАТЬ
Вы также можете использовать регулярное выражение для пути в response-router v4, если оно поддерживается path-to-regexp . См. Ответ @ Cameron для получения дополнительной информации.
источник
key
про опору.Начиная с react-route-dom v5.1.2, вы можете передать несколько путей, как показано ниже.
И, очевидно, вам нужно сначала импортировать домашний jsx файл.
источник
Другой вариант: использовать префикс маршрута.
/pages
например. Ты получишь/pages/home
/pages/users
/pages/widgets
А затем детально разрешите его внутри
Home
компонента.источник
Согласно документам React Router, proptype 'path' имеет тип string. Таким образом, вы не можете передать массив в качестве props в компонент Route.
Если вы намерены изменить только маршрут, вы можете использовать один и тот же компонент для другого маршрута, никаких проблем с этим
источник
Что касается response-router v4.4, вы можете просто сделать что-то вроде этого ниже.
сохраните путь в переменной и передайте ниже и используйте '|' Оператор.
поэтому для всего пути, который он соответствует, он будет отображать то,
component={Home}
что вам нужно.источник