Vous pouvez utiliser la history.listen()fonction lorsque vous essayez de détecter le changement d'itinéraire. Considérant que vous utilisez react-router v4, enveloppez votre composant avec withRouterHOC pour accéder à l' historyaccessoire.
history.listen()renvoie une unlistenfonction. Vous utiliseriez cela pour unregisterécouter.
Vous pouvez configurer vos itinéraires comme
index.js
ReactDOM.render(
<BrowserRouter>
<AppContainer>
<Route exact path="/" Component={...} />
<Route exact path="/Home" Component={...} />
</AppContainer>
</BrowserRouter>,
document.getElementById('root')
);
puis dans 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);
À partir des documents d' histoire :
Vous pouvez écouter les modifications apportées à l'emplacement actuel en utilisant
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}`)
})
L'objet location implémente un sous-ensemble de l'interface window.location, comprenant:
**location.pathname** - The path of the URL
**location.search** - The URL query string
**location.hash** - The URL hash fragment
Les emplacements peuvent également avoir les propriétés suivantes:
location.state - Un état supplémentaire pour cet emplacement qui ne réside pas dans l'URL (pris en charge dans createBrowserHistoryet
createMemoryHistory)
location.key- Une chaîne unique représentant cet emplacement (prise en charge dans createBrowserHistoryet createMemoryHistory)
L'action PUSH, REPLACE, or POPdépend de la manière dont l'utilisateur est arrivé à l'URL actuelle.
Lorsque vous utilisez réagir-routeur v3 , vous pouvez utiliser history.listen()du historypaquet comme mentionné ci - dessus ou vous pouvez également utiliserbrowserHistory.listen()
Vous pouvez configurer et utiliser vos itinéraires comme
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>
)
}
}