React Router v4 - Thành phần chuyển hướng (cập nhật 2017/04/15)
Cách v4 được đề xuất là cho phép phương thức kết xuất của bạn bắt được chuyển hướng. Sử dụng trạng thái hoặc đạo cụ để xác định xem thành phần chuyển hướng có cần được hiển thị không (sau đó kích hoạt chuyển hướng).
import { Redirect } from 'react-router';
// ... your class implementation
handleOnClick = () => {
// some action...
// then redirect
this.setState({redirect: true});
}
render() {
if (this.state.redirect) {
return <Redirect push to="/sample" />;
}
return <button onClick={this.handleOnClick} type="button">Button</button>;
}
Tham khảo: https://reacttraining.com/react-router/web/api/Redirect
React Router v4 - Bối cảnh bộ định tuyến tham chiếu
Bạn cũng có thể tận dụng Router
bối cảnh tiếp xúc với thành phần React.
static contextTypes = {
router: PropTypes.shape({
history: PropTypes.shape({
push: PropTypes.func.isRequired,
replace: PropTypes.func.isRequired
}).isRequired,
staticContext: PropTypes.object
}).isRequired
};
handleOnClick = () => {
this.context.router.push('/sample');
}
Đây là cách làm <Redirect />
việc dưới mui xe.
Tham khảo: https://github.com/ReactTraining/react-router/blob/master/packages/react-router/modules/Redirect.js#L46,L60
React Router v4 - Đối tượng lịch sử đột biến bên ngoài
Nếu bạn vẫn cần phải làm một cái gì đó tương tự như triển khai của v2, bạn có thể tạo một bản sao BrowserRouter
sau đó hiển thị history
dưới dạng hằng số có thể xuất. Dưới đây là một ví dụ cơ bản nhưng bạn có thể soạn nó để tiêm nó với các đạo cụ tùy biến nếu cần. Có những lưu ý cần chú ý với vòng đời, nhưng nó phải luôn luôn chạy lại Router, giống như trong v2. Điều này có thể hữu ích cho các chuyển hướng sau khi yêu cầu API từ một chức năng hành động.
// browser router file...
import createHistory from 'history/createBrowserHistory';
import { Router } from 'react-router';
export const history = createHistory();
export default class BrowserRouter extends Component {
render() {
return <Router history={history} children={this.props.children} />
}
}
// your main file...
import BrowserRouter from './relative/path/to/BrowserRouter';
import { render } from 'react-dom';
render(
<BrowserRouter>
<App/>
</BrowserRouter>
);
// some file... where you don't have React instance references
import { history } from './relative/path/to/BrowserRouter';
history.push('/sample');
Mới nhất BrowserRouter
để gia hạn: https://github.com/ReactTraining/react-router/blob/master/packages/react-router-dom/modules/BrowserRouter.js
Bộ định tuyến phản ứng v2
Đẩy một trạng thái mới vào browserHistory
thể hiện:
import {browserHistory} from 'react-router';
// ...
browserHistory.push('/sample');
Tham khảo: https://github.com/reactjs/react-router/blob/master/docs/guides/NavigatingOutsideOfComponents.md