Sie können die Funktion history.listen()
verwenden, wenn Sie versuchen, die Routenänderung zu erkennen. Unter Berücksichtigung, dass Sie react-router v4
verwenden, wickeln Sie Ihre Komponente mit withRouter
HOC, um Zugriff auf die history
Prop zu erhalten.
history.listen()
gibt eine unlisten
Funktion zurück. Sie würden dies zu vom Zuhören verwenden.
:
Sie können Ihre Routen wie
index.js
ReactDOM.render(
<BrowserRouter>
<AppContainer>
<Route exact path="/" Component={...} />
<Route exact path="/Home" Component={...} />
</AppContainer>
</BrowserRouter>,
document.getElementById('root')
);
und dann in AppContainer.js
class App extends Component {
componentWillMount() {
this.unlisten = this.props.history.listen((location, action) => {
console.log("on route change");
});
}
componentWillUnmount() {
this.unlisten();
}
render() {
return (
<div>{this.props.children}</div>
);
}
}
export default withRouter(App);
Aus der Geschichte docs konfigurieren
Sie können Änderungen an den aktuellen Standort hören mit history.listen
:
history.listen((location, action) => {
console.log(`The current URL is ${location.pathname}${location.search}${location.hash}`)
console.log(`The last navigation action was ${action}`)
})
Die Lage Objekt eine Teilmenge der window.location Schnittstelle implementiert, darunter:
**location.pathname** - The path of the URL
**location.search** - The URL query string
**location.hash** - The URL hash fragment
Standorte können auch haben die folgenden Eigenschaften:
location.state - Einige zusätzliche Zustand für diesen Ort, der in der URL befinden (in createBrowserHistory
und createMemoryHistory
unterstützt) nicht
location.key
- Eine eindeutige Zeichenfolge diesen Standort darstellt (unterstützt in createBrowserHistory
und createMemoryHistory
)
Die Aktion ist eines von PUSH, REPLACE, or POP
abhängig davon, wie der Benutzer an die aktuelle URL gelangt.
Wenn Sie reagieren-Router verwenden v3 Sie von history.listen()
aus history
Paket wie oben erwähnt, machen können, oder Sie können auch Gebrauch machen browserHistory.listen()
Sie können konfigurieren, und verwenden Sie Ihre Routen wie
import {browserHistory} from 'react-router';
class App extends React.Component {
componentDidMount() {
this.unlisten = browserHistory.listen(location => {
console.log('route changes');
});
}
componentWillUnmount() {
this.unlisten();
}
render() {
return (
<Route path="/" onChange={yourHandler} component={AppContainer}>
<IndexRoute component={StaticContainer} />
<Route path="/a" component={ContainerA} />
<Route path="/b" component={ContainerB} />
</Route>
)
}
}
machen
Welche Version von react-router verwenden Sie? Das wird den besten Ansatz bestimmen. Ich werde eine Antwort geben, sobald Sie aktualisieren. Das heißt, der [withRouter] (https://reacttraining.com/reacts-router/web/api/withRouter) HoC stellt wahrscheinlich die beste Möglichkeit dar, den Komponentenstandort zu erkennen und aktualisiert Ihre Komponente mit neuen ({Übereinstimmung, Verlauf und Standort}), wenn sich eine Route ändert. Auf diese Weise müssen Sie Ereignisse nicht manuell abonnieren oder abbestellen. Das heißt, es ist einfach zu Verwendung mit funktionalen zustandslosen Komponenten sowie Klassenkomponenten. –