Sie können die history.listen()
Funktion verwenden, wenn Sie versuchen, die Routenänderung zu erkennen. Wenn Sie verwenden react-router v4
, wickeln Sie Ihre Komponente mit withRouter
HOC ein, um Zugriff auf die history
Requisite zu erhalten.
history.listen()
gibt eine unlisten
Funktion zurück. Sie würden dies verwenden, um unregister
zuzuhören.
Sie können Ihre Routen wie konfigurieren
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 :
Sie können auf Änderungen am aktuellen Speicherort warten, indem Sie
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}`)
})
Das Standortobjekt implementiert eine Teilmenge der Schnittstelle window.location, einschließlich:
**location.pathname** - The path of the URL
**location.search** - The URL query string
**location.hash** - The URL hash fragment
Standorte können auch die folgenden Eigenschaften haben:
location.state - Ein zusätzlicher Status für diesen Standort, der sich nicht in der URL befindet (unterstützt in createBrowserHistory
und
createMemoryHistory
)
location.key
- Eine eindeutige Zeichenfolge, die diesen Speicherort darstellt (unterstützt in createBrowserHistory
und createMemoryHistory
)
Die Aktion hängt davon PUSH, REPLACE, or POP
ab, wie der Benutzer zur aktuellen URL gelangt ist.
Wenn Sie verwenden , reagieren-Router v3 können Sie Gebrauch machen history.listen()
von history
Paket wie oben erwähnt , oder Sie können auch Gebrauch machenbrowserHistory.listen()
Sie können Ihre Routen wie konfigurieren und verwenden
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>
)
}
}