Я хотел бы, чтобы отобразить title
в <AppBar />
том , что каким - то образом передается из текущего маршрута.
В React Router v4, как можно <AppBar />
было бы передать текущий маршрут в его title
пропеллер?
<Router basename='/app'>
<main>
<Menu active={menu} close={this.closeMenu} />
<Overlay active={menu} onClick={this.closeMenu} />
<AppBar handleMenuIcon={this.handleMenuIcon} title='Test' />
<Route path='/customers' component={Customers} />
</main>
</Router>
Есть ли способ передать пользовательское название от обычая prop
на <Route />
?
reactjs
react-router
react-router-v4
Рафаэль Рафатпана
источник
источник
Ответы:
В версии 5.1 реакции-маршрутизатора есть ловушка, называемая useLocation , которая возвращает объект текущего местоположения. Это может быть полезно в любое время, когда вам нужно знать текущий URL.
источник
redirect
. это будет читать путь до перенаправленияВ реагирующем маршрутизаторе 4 текущий маршрут находится в -
this.props.location.pathname
. Просто получитеthis.props
и проверьте. Если вы все еще не видите,location.pathname
то вы должны использовать декораторwithRouter
.Это может выглядеть примерно так:
источник
window.location.pathname
Если вы используете РЕАКТ шаблонов, где конец вашего реагирующий файл выглядит следующим образом :
export default SomeComponent
вам нужно использовать компонент высшего порядка (часто называемый как «HOC»),withRouter
.Во-первых, вам нужно импортировать
withRouter
так:Далее вы захотите использовать
withRouter
. Вы можете сделать это, изменив экспорт вашего компонента. Вероятно, вы хотите изменить сexport default ComponentName
наexport default withRouter(ComponentName)
.Тогда вы можете получить маршрут (и другую информацию) из реквизита. В частности,
location
,match
, иhistory
. Код для выделения пути:Хорошая рецензия с дополнительной информацией доступна здесь: https://reacttraining.com/react-router/core/guides/philosophy
источник
Вот решение, использующее
history
Подробнеевнутри роутера
источник
this.props....
кто просто шум для наших ушей.В реакции-маршрутизаторе v5 есть ловушка под названием useLocation , нет необходимости в HOC или других вещах, она очень лаконична и удобна.
источник
Я думаю, что автор React Router (v4) только что добавил это с помощью Router HOC, чтобы успокоить определенных пользователей. Тем не менее, я считаю, что лучше всего использовать рендер-проп и создать простой компонент PropsRoute, который пропускает эти реквизиты. Это легче проверить, поскольку вы не «подключаете» компонент, как это делает withRouter. Имейте кучу вложенных компонентов, завернутых в withRouter, и это не будет весело. Еще одним преимуществом является то, что вы также можете использовать этот проход через любые реквизиты, которые вы хотите на маршруте. Вот простой пример использования рендера проп. (в значительной степени точный пример с их веб-сайта https://reacttraining.com/react-router/web/api/Route/render-func ) (src / components / route / props-route)
Использование: (обратите внимание, чтобы получить параметры маршрута (match.params), вы можете просто использовать этот компонент, и они будут переданы для вас)
Также обратите внимание, что таким способом вы можете передать любые дополнительные реквизиты, которые захотите.
источник
Имеет Con Posidielov сказал, текущий маршрут присутствует в
this.props.location.pathname
.Но если вы хотите сопоставить более конкретное поле, например ключ (или имя), вы можете использовать matchPath, чтобы найти исходную ссылку на маршрут.
источник
Добавить
Затем измените экспорт компонентов
Затем вы можете получить доступ к маршруту непосредственно внутри самого компонента (не затрагивая ничего в вашем проекте), используя:
Протестировано в марте 2020 года с: «версия»: «5.1.2»
источник