Ich möchte ein title
in anzeigen<AppBar />
, das irgendwie von der aktuellen Route übergeben wurde.
Wie kann in React Router v4 <AppBar />
die aktuelle Route an die title
Requisite übergeben werden?
<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>
Gibt es eine Möglichkeit , einen eigenen Titel von einer Gewohnheit führen prop
auf <Route />
?
reactjs
react-router
react-router-v4
Raphael Rafatpanah
quelle
quelle
Antworten:
In der Version 5.1 von React -Router gibt es einen Hook namens useLocation , der das aktuelle Standortobjekt zurückgibt. Dies kann immer dann nützlich sein, wenn Sie die aktuelle URL kennen müssen.
quelle
redirect
verwendet wurde. Dies wird den Pfad vor der Weiterleitung lesenIn React Router 4 ist die aktuelle Route in -
this.props.location.pathname
. Einfach abrufenthis.props
und überprüfen. Wenn Sie immer noch nicht sehenlocation.pathname
, sollten Sie den Dekorateur verwendenwithRouter
.Das könnte ungefähr so aussehen:
quelle
window.location.pathname
Wenn Sie die Vorlagen von react verwenden, bei denen das Ende Ihrer React-Datei folgendermaßen aussieht:
export default SomeComponent
Sie müssen die Komponente höherer Ordnung verwenden (häufig als "HOC" bezeichnet)withRouter
.Zuerst müssen Sie wie folgt importieren
withRouter
:Als nächstes möchten Sie verwenden
withRouter
. Sie können dies tun, indem Sie den Export Ihrer Komponente ändern. Es ist wahrscheinlich , wollen Sie ändernexport default ComponentName
zuexport default withRouter(ComponentName)
.Dann können Sie die Route (und andere Informationen) von Requisiten erhalten. Insbesondere
location
,match
undhistory
. Der Code zum Ausspucken des Pfadnamens wäre:Eine gute Beschreibung mit zusätzlichen Informationen finden Sie hier: https://reacttraining.com/react-router/core/guides/philosophy
quelle
Hier ist eine Lösung mit
history
Read moreim Router
quelle
this.props....
was nur Lärm in unseren Ohren ist.In React -Router v5 gibt es einen Hook namens useLocation , der weder HOC noch andere Dinge benötigt. Er ist sehr prägnant und praktisch.
quelle
Ich denke, der Autor von React Router (v4) hat das gerade mit Router HOC hinzugefügt, um bestimmte Benutzer zu beruhigen. Ich glaube jedoch, dass der bessere Ansatz darin besteht, einfach die Render-Requisite zu verwenden und eine einfache PropsRoute-Komponente zu erstellen, die diese Requisiten übergibt. Dies ist einfacher zu testen, da die Komponente nicht wie bei Router "verbunden" wird. Haben Sie eine Reihe verschachtelter Komponenten in Router eingewickelt und es wird keinen Spaß machen. Ein weiterer Vorteil ist, dass Sie diesen Pass auch über beliebige Requisiten zur Route verwenden können. Hier ist das einfache Beispiel mit Render Prop. (so ziemlich das genaue Beispiel von ihrer Website https://reacttraining.com/react-router/web/api/Route/render-func ) (src / components / route / props-route)
Verwendung: (Hinweis zum Abrufen der Routenparameter (match.params) Sie können diese Komponente einfach verwenden und diese werden für Sie übergeben.)
Beachten Sie auch, dass Sie auf diese Weise auch die gewünschten zusätzlichen Requisiten weitergeben können
quelle
Hat Con Posidielov gesagt, die aktuelle Route ist in vorhanden
this.props.location.pathname
.Wenn Sie jedoch einem spezifischeren Feld wie einem Schlüssel (oder einem Namen) entsprechen möchten , können Sie matchPath verwenden , um die ursprüngliche Routenreferenz zu finden.
quelle
Hinzufügen
Ändern Sie dann Ihren Komponentenexport
Anschließend können Sie auf die Route direkt innerhalb der Komponente selbst zugreifen (ohne etwas anderes in Ihrem Projekt zu berühren), indem Sie:
Getestet im März 2020 mit: "version": "5.1.2"
quelle