Ich brauche eine Hilfe mit dem reaktiver Router v2 + Ich muss die Navbar-Klasse ändern, wenn die Route geändert wird Zum Beispiel für route /profile className
wird "profile-header"
Ich habe versucht, this.props.location
in der Navbar-Komponente zu verwenden, aber es zeigt undefined
Hoffe deine Hilfe
Ihre navbar
-Komponente (wie Sie sie in Ihrer Frage beschrieben haben) ist wahrscheinlich nicht die Routenkomponente, richtig? Mit route component
meine ich diejenige, die Sie in Ihrer react-router
-Konfiguration verwenden, die für eine bestimmte Route geladen wird.
this.props.location
ist nur für diesen route component
zugänglich, daher müssen Sie ihn an Ihre navbar
übergeben.
Nehmen wir ein Beispiel:
Ihre Router-Konfiguration:
<Router>
<Route path="/" component={App}>
// ...
</Router
Routenkomponente App
:
class App extends React.Component{
// ...
render() {
return <Navbar location={this.props.location}/>
}
}
Es kann vorkommen, dass Sie möglicherweise keinen Zugriff auf props.location haben, um an die nav-Komponente zu übergeben.
Nehmen wir zum Beispiel - Wir hatten eine Header-Komponente in unserem Projekt, die im Routing-Switch enthalten war, um sie allen Routen zur Verfügung zu stellen.
<Switch>
<Fragment>
<Header/>
<Route path='..' component={...}/>
<Route path='..' component={...}/>
</Fragment>
</Switch>
Im obigen Szenario gibt es keine Möglichkeit, die Positionsdaten an die Kopfkomponente zu übergeben.
Eine bessere Lösung wäre für uns das withRouter-HOC, wenn eine Komponente von Ihrem Router nicht gerendert wird .. Sie haben weiterhin Zugriff auf den Verlauf, die Übereinstimmung und den Speicherort der Routereigenschaften, wenn Sie sie in das withRouter-HOC packen:
import { withRouter } from 'react-router-dom'
....
....
export default withRouter(ThisComponent)
Ich konnte es mit den hier angegebenen Lösungen nicht lösen und hier ist, was für mich gearbeitet hat:
Ich habe history
in meine Komponente importiert und history.location.pathname
Einer Variablen zugewiesen, die ich später für die dynamische Stilmanipulation verwendet habe.
reag-router v4
Aus Dokumentation :
Die
<Route>
component
-Eigenschaft sollte verwendet werden, wenn Sie über eine vorhandene Komponente verfügen. Die<Route>
render
-Eigenschaft nimmt eine Inline-Funktion an, die html zurückgibt.Ein
<Route>
ohnepath
stimmt immer überein.
Auf dieser Grundlage können wir einen <Route>
-Wrapper für beliebige Ebene Ihrer HTML-Struktur erstellen. Es wird immer angezeigt und hat Zugriff auf das Positionsobjekt.
Wenn ein Benutzer zur /profile
-Seite kommt, hat <header>
gemäß Ihrer Anfrage den profile-header
-Klassennamen.
<Router>
<Route render={({ location }) =>
<header className={location.pathname.replace(/\//g, '') + '-header'}>
// header content...
</header>
<div id="content"></div>
<footer></footer>
} />
</Router>