Ви можете скористатися history.listen()
функцією, намагаючись виявити зміну маршруту. Враховуючи, що ви використовуєте react-router v4
, оберніть ваш компонент withRouter
HOC, щоб отримати доступ до history
prop.
history.listen()
повертає unlisten
функцію. Ви б використали це, щоб unregister
слухати.
Ви можете налаштувати свої маршрути, як
index.js
ReactDOM.render(
<BrowserRouter>
<AppContainer>
<Route exact path="/" Component={...} />
<Route exact path="/Home" Component={...} />
</AppContainer>
</BrowserRouter>,
document.getElementById('root')
);
а потім у 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);
З документації історії :
Ви можете прослухати зміни поточного місцезнаходження, використовуючи
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}`)
})
Об'єкт location реалізує підмножину інтерфейсу window.location, включаючи:
**location.pathname** - The path of the URL
**location.search** - The URL query string
**location.hash** - The URL hash fragment
Місцеположення також можуть мати такі властивості:
location.state - деякий додатковий стан для цього розташування, яке не міститься в URL-адресі (підтримується в createBrowserHistory
та
createMemoryHistory
)
location.key
- Унікальний рядок, що представляє це місце (підтримується в createBrowserHistory
та createMemoryHistory
)
Дія PUSH, REPLACE, or POP
залежить від того, як користувач потрапляє до поточної URL-адреси.
При використанні зреагувати-маршрутизатор v3 ви можете використовувати history.listen()
з history
пакета , як згадувалося вище , або ви можете також використовуватиbrowserHistory.listen()
Ви можете налаштувати та використовувати свої маршрути, наприклад
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>
)
}
}