【发布时间】:2016-07-01 06:28:56
【问题描述】:
我正在尝试使用 React JS 和 react-router 创建一个多步骤表单。
表单步骤随状态而变化。如果我单击下一步按钮,状态步将递增并显示下一步。
但是这样,如果我在例如第三步并且我在浏览器中单击背面,我将被重定向到主页而不是上一步。
我的主要组件是这样的:
componentWillMount(){
console.log(this.props.params.id);
}
onButtonClick(name, event) {
event.preventDefault();
switch (name) {
case "stepFourConfirmation":
if(this.validation("four")) {
this.props.actions.userRegistrationThunk(this.state.user);
this.setState({step: 5, user: {}});
}
break;
case "stepTwoNext":
if(this.validation("two")) {
this.setState({step: 3});
this.context.router.push("stepThree");
}
break;
case "stepThreeFinish":
this.setState({step: 4});
break;
default:
if(this.validation("one")) {
this.setState({step: 2});
this.context.router.push('stepTwo');
}
}
}
在每次单击按钮时,我都会将参数推送到 url 并更改步骤。当我单击下一步时,它工作完美。在 componentWillMount 中,我试图从 url 获取参数,然后我会根据参数减少步骤。
但只有在加载第一步时,我才会在控制台中设置 stepOne。如果我点击下一步,我会得到 [react-router] Location "stepTwo" did not match any routes
我的 routes.js 文件如下:
import React from 'react';
import {IndexRoute, Route} from 'react-router';
import App from './components/App';
import HomePage from './components/HomePage';
import Registration from './components/registration/RegistrationPage';
import UserPage from './components/user/userHome';
import requireAuth from './common/highOrderComponents/requireAuth';
import hideIfLoggedIn from './common/highOrderComponents/hideIfLoggedIn';
import PasswordReset from './common/passwordReset';
const routes = (
<Route path="/" component={App}>
<IndexRoute component={HomePage}/>
<Route path="registration/:id" component={hideIfLoggedIn(Registration)}/>
<Route path="reset-password" component={PasswordReset} />
<Route path="portal" component={requireAuth(UserPage)} />
</Route>
);
export default routes;
有什么解决办法吗?
【问题讨论】:
-
你能提供一个要点
-
我所有的代码?每个表单步骤都有组件?
-
至少是主要组件。更多相关信息更好
-
这里是link
-
你试过
browserHistory.push(<your-route>)吗?
标签: javascript reactjs react-router