以多步形式

时间:2016-04-25 13:19:19

标签: reactjs react-router flux reactjs-flux

我有一个反应多步形式与这样的助焊剂存储:

// MultiForm.js
....
import LoadFile from './components/LoadFile';
import LoadPeople from './components/LoadPeople';
import Confirmation from './components/Confirmation';

class MultiForm extends Component {
.
.
.

    nextPage() {
      // Update page number with a flux action
      MultiStepActions.nextPage();
    }

    previousPage() {
      // Update page number with a flux action
      MultiStepActions.previousPage();
    }

    render() {
       const {pagina} = this.state;
       <div className="container">
         {page === 1 && <LoadFile
           handleChange={this.handleChange}
           file={this.state.file}
           nextPage={this.nextPage}
           data1={this.state.data1}
           data2={this.state.data2}
           data3={this.state.data3}/>
         }
         {page === 2 && <LoadPeople
           listPeople={this.state.listPeople}
           nextPage={this.nextPage}
           previousPage={this.previousPage}
           handleChangePeople={this.handleChangePeople}/>
         }
         {page === 3 && <Confirmation
           listData={this.state.listData}
           nextPage={this.nextPage}
           previousPage={this.previousPage}/>
         }
       </div>
    }
}


// Index.js with react-router
import Menu from './components/Menu';
class Index extends Component {
    class App extends Component {
      render() {
        return (
          <div>
            <Menu />
            {this.props.children}
          </div>
        )
      }
    }

    render((
      <Router history={browserHistory}>
        <Route path="/" component={App}>
          <Route path="/MultiForm" component={MultiForm}>
          </Route>
        </Route>
      </Router>
    ), document.getElementById('app'));
}

它是主要组件(MultiForm)和基本反应路由器方案的摘要。 在组件中,我使用flux存储来设置和获取多步表单的实际页数,然后根据实际页面呈现组件。

在组件(LoadFile,LoadPeople,Confirmation)中,我有一个按钮,可以导航到下一个和previos页面(通过nextPage和previousPage功能),所有这些都可以。

现在我希望使用浏览器的后退和上一个按钮获得相同的结果,我想用react-router。那么,我必须如何配置反应路由器或我需要做什么才能使浏览器按钮工作等于我的下一个和上一个按钮?

1 个答案:

答案 0 :(得分:3)

您无法覆盖浏览器的导航按钮。但是,您可以连接react-router中定义的页面状态,当用户使用导航按钮浏览时,您的应用程序状态将保持同步到浏览器状态。

我建议你为MultiForm路线创建一个参数:

<Route path="/Multiform/:page" component={MultiForm} />

这样您就可以在page

中获取this.props.params.page参数

更好的是,您可以将每个子组件作为路径连接起来:

<Route path="/Multiform/" component={MultiForm}>
  <Route path="1" component={LoadFile} />
  <Route path="2" component={LoadPeople} />
  <Route path="3" component={Confirmation} />
</Route>

class Multiform extends Component {
    //...
    render() {
        return (
            <div className="container">
                { this.props.children }
            </div>
        )
    }
}