Bạn có thể sử dụng chức năng history.listen()
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
, hãy bọc thành phần của bạn với withRouter
HOC để truy cập vào số history
chống đỡ.
history.listen()
trả về hàm unlisten
. Bạn sẽ sử dụng điều này để nghe số unregister
.
Bạn có thể cấu hình các tuyến của bạn 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ừ lịch sử docs:
Bạn có thể nghe thay đổi đối với vị trí hiện tại 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í thực hiện 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
Địa điểm cũng có thể có các thuộc tính sau:
location.state - Một số nhà nước bổ sung cho vị trí này mà không thường trú tại địa chỉ 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 số PUSH, REPLACE, or POP
tùy thuộc vào cách người dùng truy cập 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ụng browserHistory.listen()
Bạn có thể cấu hình và sử dụng các tuyến đường của bạn 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>
)
}
}
gì phiên bản của phản ứng-router là bạn đang sử dụng? Điều đó sẽ xác định cách tiếp cận tốt nhất.Tôi sẽ cung cấp một câu trả lời khi bạn cập nhật.Đó là nói, [withRouter] (https://reacttraining.com/react-router/web/api/withRouter) HoC có lẽ là cách tốt nhất để bạn có thể nhận biết được vị trí thành phần và cập nhật thành phần của bạn với ({match, history, and location}) bất cứ khi nào một lộ trình thay đổi theo cách bạn không cần đăng ký và hủy đăng ký các sự kiện theo cách thủ công. Có nghĩa là nó rất dễ sử dụng với các thành phần không trạng thái chức năng cũng như các thành phần lớp. –