Chciałbym wyświetlić title
in, <AppBar />
które zostało w jakiś sposób przekazane z bieżącej trasy.
W jaki sposób w React Router v4 <AppBar />
można uzyskać przekazanie bieżącej trasy do jej właściwości 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>
Czy istnieje sposób, aby zdać niestandardowy tytuł od zwyczaju prop
na <Route />
?
reactjs
react-router
react-router-v4
Raphael Rafatpanah
źródło
źródło
Odpowiedzi:
W wydaniu 5.1 reakcji-routera znajduje się punkt zaczepienia o nazwie useLocation , który zwraca obiekt z bieżącą lokalizacją. Może się to przydać za każdym razem, gdy potrzebujesz znać aktualny adres URL.
źródło
redirect
był używany router . to odczyta ścieżkę przed przekierowaniemW reakcji router 4 bieżąca trasa znajduje się w -
this.props.location.pathname
. Po prostu pobierzthis.props
i zweryfikuj. Jeśli nadal nie widziszlocation.pathname
, powinieneś użyć dekoratorawithRouter
.Może to wyglądać mniej więcej tak:
źródło
window.location.pathname
Jeśli używasz reagować'S szablony, gdzie koniec swojego wyglądu plików reagują tak:
export default SomeComponent
trzeba użyć komponentu wyższego rzędu (często określane jako „HOC”)withRouter
.Najpierw musisz zaimportować w następujący
withRouter
sposób:Następnie będziesz chciał użyć
withRouter
. Możesz to zrobić, zmieniając eksport komponentu. Prawdopodobnie chcesz zmienić zexport default ComponentName
naexport default withRouter(ComponentName)
.Następnie możesz uzyskać trasę (i inne informacje) z rekwizytów. Konkretnie
location
,match
orazhistory
. Kod wypluwający nazwę ścieżki wyglądałby tak:Dobry opis z dodatkowymi informacjami jest dostępny tutaj: https://reacttraining.com/react-router/core/guides/philosophy
źródło
Oto rozwiązanie wykorzystujące
history
Czytaj więcejwewnątrz routera
źródło
this.props....
wszystko jest tylko hałasem dla naszych uszu.W React -router v5 jest hak o nazwie useLocation , który nie wymaga HOC ani innych rzeczy, jest bardzo zwięzły i wygodny.
źródło
Myślę, że autor React Router (v4) właśnie dodał to z Router HOC, aby uspokoić niektórych użytkowników. Uważam jednak, że lepszym podejściem jest po prostu użycie właściwości renderowania i utworzenie prostego komponentu PropsRoute, który przekazuje te właściwości. Jest to łatwiejsze do przetestowania, ponieważ nie „łączy” komponentu, tak jak robi to withRouter. Zapakuj kilka zagnieżdżonych komponentów z routerem i nie będzie to zabawne. Kolejną korzyścią jest to, że możesz również użyć tego przejścia przez dowolne rekwizyty na trasie. Oto prosty przykład użycia właściwości renderowania. (prawie dokładny przykład z ich strony internetowej https://reacttraining.com/react-router/web/api/Route/render-func ) (src / components / tours / props-route)
użycie: (uwaga, aby uzyskać parametry trasy (match.params), możesz po prostu użyć tego komponentu, a te zostaną przekazane za Ciebie)
Zauważ też, że możesz w ten sposób przekazać dowolne dodatkowe rekwizyty
źródło
Ma Con Posidielov powiedział, obecna trasa jest obecny w
this.props.location.pathname
.Ale jeśli chcesz dopasować bardziej szczegółowe pole, takie jak klucz (lub nazwa), możesz użyć funkcji matchPath, aby znaleźć oryginalne odwołanie do trasy.
źródło
Dodaj
Następnie zmień eksport komponentu
Następnie możesz uzyskać dostęp do trasy bezpośrednio w samym komponencie (bez dotykania niczego innego w projekcie) za pomocą:
Testowano w marcu 2020 r. Na: „wersja”: „5.1.2”
źródło