this.props.history.push('/某路徑')
實現路由跳轉,誠然,在之前的版本是可行的,聽說,反正我沒用過。而奇葩的4.2版本並不支持這種方式。我在網上看了許久,試了諸多辦法,任然沒法經過上述方式實現js控制路由切換,emmm...使用4.2裏面的Redirect標籤?組件?,不知道怎麼稱呼 具體以下: 先定義路由(表):
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom'; <Router > <div style={{height:'100%'}}> <Switch> <Route exact path="/" component={LoginPage}/> <Route path="/chat" component={Chat}/> <Route path="/home" component={Home}/> <Route path="/login" component={Login}/> </Switch> </div> </Router>)
方法1、在子組件裏使用
先要引入Redirectreact
import { Redirect } from 'react-router'; class Login extends React.Component { render() { const {isRegisterNewUser,loginSuccess}=this.props; const { getFieldDecorator} = this.props.form; if(loginSuccess){ *return (<Redirect to="/chat" />);* }else{ return( 這裏放沒登錄以前的各類form表單 ) } } }
方法2、來自下面的大佬:靜對94
import PropTypes from 'prop-types';web
static contextTypes = { router: PropTypes.object.isRequired, } console.log(this.context.router)
例如:redux
class Login extends React.Component { static contextTypes = { router: PropTypes.object.isRequired, } render() { const {isRegisterNewUser,loginSuccess}=this.props; const { getFieldDecorator} = this.props.form; if(loginSuccess){//登錄狀態變爲成功 this.context.router.history.push('/chat) }else{ return( 這裏放沒登錄以前的各類form表單 ) } } }
方法3、來自Inori_Lover 大佬推薦的官方文檔:使用withRouter解決segmentfault
import {withRouter } from 'react-router'; class Login extends React.Component { static contextTypes = { router: PropTypes.object.isRequired, } render() { const {isRegisterNewUser,loginSuccess,history}=this.props; const { getFieldDecorator} = this.props.form; if(loginSuccess){//登錄狀態變爲成功 this.props.history.push('/chat) }else{ return( 這裏放沒登錄以前的各類form表單 ) } } } ... const Login=withRouter(connect(mapStateToProps,mapDispatchToProps)(TLogin)) export default Login;
若是你沒有使用redux,那麼你使用withRouter的正確姿式應該是api
const Login=withRouter(TLogin) export default Login;
感謝各位大佬的指點,是我太浮躁,沒認真閱讀文檔,之後必定多看。無論什麼方式,解決問題纔是最重要的。react-router
參考鏈接:stackoverflowdom