根据您希望重定向的行为方式,有多种选择:React router docs
重定向组件
渲染 a 将导航到新位置。新位置将覆盖历史堆栈中的当前位置,就像服务器端重定向 (HTTP 3xx) 那样。
to: string
- 要重定向到的 URL。
to: object
- 要重定向到的位置。
push: bool
- 当为 true 时,重定向会将新条目推送到历史记录中,而不是替换当前条目。
例子: <Redirect push to="/somewhere"/>
import { Route, Redirect } from 'react-router'
export class WelcomeForm extends Component {
handleSubmit = (e) => {
e.preventDefault()
if(this.validateForm())
<Redirect push to="/life"/>
}
render() {
return (
<form className="WelcomeForm" onSubmit={this.handleSubmit}>
<input className="minutes" type="number" value={this.state.minutes} onChange={ (e) => this.handleChanges(e, "minutes")}/>
</form>
)
}
}
使用withRouter
HoC
这个高阶组件将注入与 Route 相同的 props。但是,它存在每个文件只能有 1 个 HoC 的限制。
import { withRouter } from 'react-router-dom'
export class WelcomeForm extends Component {
handleSubmit = (e) => {
e.preventDefault()
if(this.validateForm())
this.props.history.push("/life");
}
render() {
return (
<form className="WelcomeForm" onSubmit={this.handleSubmit}>
<input className="minutes" type="number" value={this.state.minutes} onChange={ (e) => this.handleChanges(e, "minutes")}/>
</form>
)
}
}