【发布时间】:2017-05-29 17:13:05
【问题描述】:
我正在构建一个用户首先加载的多步骤表单流:/welcome,然后应该引导用户完成以下操作
step 0: `/welcome` (Should redirect to step 1)
step 1: `/welcome/workplace`
step 2: `/welcome/profile`
这是我目前所拥有的:
App.jsx:
import Welcome from '../containers/welcome/Welcome';
const App = ({store}) => {
return (
<StoreProvider store={store}>
<ConnectedRouter history={history}>
<Switch>
<PrivateRoute exact path="/welcome" layout={MainLayout} component={Welcome} />
<WithMainLayout exact path="/" component={Home} />
<AuthRoutes path={`/${clientResourceName}`} wrapper={WithMainLayout} />
<WithMainLayout component={NotFound} />
</Switch>
</ConnectedRouter>
</StoreProvider>
);
};
Welcome.js
import React from 'react';
import WorkPlacePage from '../../components/welcome/WorkPlacePage';
class Welcome extends React.Component {
constructor(props) {
super(props);
this.state = {
step: 1
};
}
showStep() {
const {history} = this.props
console.log('showStep');
console.log({history})
switch (this.state.step) {
case 1:
return <WorkPlacePage history={history} />
default:
return (
<div>
<h1>Case: Default</h1>
</div>
);
}
}
render() {
var style = {
width : (this.state.step / 4 * 100) + '%'
}
return (
<main>
<span className="progress-step">Step {this.state.step}</span>
<progress className="progress" style={style}></progress>
{this.showStep()}
</main>
)
}
}
export default Welcome;
WorkPlacePage.js
import React from 'react';
import {connect} from 'react-redux';
import {bindActionCreators} from 'redux';
class WorkPlacePage extends React.Component {
render() {
console.log('this.props.history')
console.log(this.props.history)
return (
<div>
<h1>Workplace</h1>
<span>
survey things
<button onClick={() => this.props.history.push("/confirmation")}>next page</button>
</span>
</div>
);
}
}
export default WorkPlacePage;
作为一个反应,redux 新手,我可以在以下方面使用您的建议:
- 我是否正确地构建了这个多步骤表单?
- 如果用户在其浏览器中加载
/welcome,将浏览器自动重定向到步骤 1/welcome/workplace的正确方法是什么 - 在 WorkplacePage.js 上,单击 NEXT 按钮时出现以下 JS 错误:
=Uncaught TypeError: Cannot read property 'push' of undefined--- 为什么未定义历史记录?
感谢所有专家的帮助!
【问题讨论】:
-
你需要将 props 传入
<WorkPlacePage /> -
@BlairAnderson 感谢您的回复。对前两个问题有什么想法吗?
-
1.是/确定这看起来不错,您正在制作一个状态机,并且必须使用结构。
-
2.重定向你可以渲染
<Redirect to="/somewhere/else"/>- github.com/ReactTraining/react-router/blob/master/packages/… -
@BlairAnderson 如何将道具传递到 WorkPlacePage?
标签: reactjs react-redux