Bạn có thể sử dụng history.listen()
chức năng khi cố gắng phát hiện thay đổi tuyến đường. Xem xét bạn đang sử dụng react-router v4
, bọc thành phần của bạn bằng withRouter
HOC để có quyền truy cập vào phần history
hỗ trợ.
history.listen()
trả về một unlisten
hàm. Bạn sẽ sử dụng điều này để unregister
nghe.
Bạn có thể định cấu hình các tuyến đường của mình như
index.js
ReactDOM.render(
<BrowserRouter>
<AppContainer>
<Route exact path="/" Component={...} />
<Route exact path="/Home" Component={...} />
</AppContainer>
</BrowserRouter>,
document.getElementById('root')
);
và sau đó trong 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);
Từ tài liệu lịch sử :
Bạn có thể nghe các thay đổi đối với vị trí hiện tại bằng cách sử dụng
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}`)
})
Đối tượng vị trí triển khai một tập hợp con của giao diện window.location, bao gồm:
**location.pathname** - The path of the URL
**location.search** - The URL query string
**location.hash** - The URL hash fragment
Vị trí cũng có thể có các thuộc tính sau:
location.state - Một số trạng thái bổ sung cho vị trí này không nằm trong URL (được hỗ trợ trong createBrowserHistory
và
createMemoryHistory
)
location.key
- Một chuỗi duy nhất đại diện cho vị trí này (được hỗ trợ trong createBrowserHistory
và createMemoryHistory
)
Hành động là một trong những PUSH, REPLACE, or POP
tùy thuộc vào cách người dùng truy cập vào URL hiện tại.
Khi bạn đang sử dụng phản ứng-router v3 bạn có thể tận dụng history.listen()
từ history
gói như đã đề cập ở trên hoặc bạn cũng có thể tận dụngbrowserHistory.listen()
Bạn có thể định cấu hình và sử dụng các tuyến đường của mình như
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>
)
}
}