我正在努力学习React + ReactRouter来构建一个多步骤的表单。我在这里工作了一个例子:https://www.viget.com/articles/building-a-multi-step-registration-form-with-react
问题是此示例没有使用ReactRouter,因此URL在表单期间永远不会更改。作者提到"您可以将每个步骤设置为自定义路线"但是,我还没有弄清楚如何让它发挥作用。如何更新当前的渲染过程以使用ReactRouter?
render: function() {
switch (this.state.step) {
case 1:
return <AccountFields fieldValues={fieldValues}
nextStep={this.nextStep}
saveValues={this.saveValues} />
case 2:
return <SurveyFields fieldValues={fieldValues}
nextStep={this.nextStep}
previousStep={this.previousStep}
saveValues={this.saveValues} />
case 3:
return <Confirmation fieldValues={fieldValues}
previousStep={this.previousStep}
submitRegistration={this.submitRegistration} />
case 4:
return <Success fieldValues={fieldValues} />
}
}
我试过了:
render: function() {
switch (this.state.step) {
case 1:
return <AccountFields fieldValues={fieldValues}
nextStep={this.nextStep}
saveValues={this.saveValues} />
case 2:
browserHistory.push('/surveyfields')
case 3:
browserHistory.push('/confirmation')
case 4:
browserHistory.push('/success')
}
}
已更新
..
case 2:
<Route path="/surveyfields" component={SurveyFields}/>
..
var Welcome = React.createClass({
render() {
return (
<Router history={browserHistory}>
<Route path='/welcome' component={App}>
<IndexRoute component={Home} />
<Route path='/stuff' component={Stuff} />
<Route path='/features' component={Features} />
<Route path='/surveyfields' component={SurveyFields} />
</Route>
</Router>
);
}
});
答案 0 :(得分:1)
如果您按照这样的方式进行路由,则从/surveyfields
转换为/success
不会影响Survey
组件的状态。
<Route path="/surveyfields" component={Survey}/>
<Route path="/confirmation" component={Survey}/>
<Route path="/success" component={Survey}/>
然而, React Router会更新道具并触发渲染。如果您想根据网址呈现不同的内容,请使用render
方法。
if(this.props.location.pathname==="/surveyfields")
return (
<span>
survey things
<Button onClick={() => this.props.history.push("/confirmation")}>next page</Button>
</span>)
if(this.props.location.pathname==="/confirmation")
return <span>do you want to do this</span>
单击该按钮将导航到下一页。 React路由器为路由组件插入location
和history
道具。