【问题标题】:Dynamically create pages for redux-form wizard为 redux-form 向导动态创建页面
【发布时间】:2018-02-08 09:56:05
【问题描述】:

我正在尝试基于 Redux 表单 - 向导示例 (https://codesandbox.io/s/0Qzz3843) 构建表单。在问卷的第一页,我有一组选项(复选框)。我希望能够根据用户在第一页上选择的内容生成后续页面。例如,如果用户从选项 A-J 中选择选项 A、B 和 F,则后续页面将分别仅是针对 A、B 和 F 的问题。这些后续页面将具有相同的字段集(标题、描述、预算)。

我确信我只需要为这组字段创建一个组件,再加上另一个组件,我需要能够为第一页中设置的每个状态(选项)动态生成页面。

我认为每个 case 没有中断的 switch/case 可能会起作用(在我的包装器组件中实现),但是会有更优雅的方法吗?

我对此很陌生,非常感谢有关一些代码的指示/建议/帮助。非常感谢!

【问题讨论】:

    标签: reactjs redux redux-form


    【解决方案1】:

    我必须使用 formValueSelector API 来访问不同页面上的表单值,然后通过条件渲染来显示不同的页面。

    这是来自 redux-form 示例向导的修改后的向导代码。如果您在第二页选择男性,您会在第三页获得最喜欢的颜色下拉问题。如果你选择女性,你会得到一个就业复选框问题。

    我创建了一个 isMale 的条件变量,并根据男性答案是否为真返回不同的字段。我确信有更优雅的方法可以做到这一点,但这是对我有用的一种方法。

    https://codesandbox.io/s/34jp9rqp71

    我刚刚修改/添加了这部分代码。

    WizardFormThirdPage.js

    import { Field, reduxForm, formValueSelector } from "redux-form";
    import { connect } from "react-redux";
    
    let WizardFormThirdPage = props => {
      const { sex, handleSubmit, pristine, previousPage, submitting } = props;
      var isMale = sex == "male" ? true : false;
    
      return (
        <form onSubmit={handleSubmit}>
          {isMale && (
            <div>
              <label>Favorite Color</label>
              <Field name="favoriteColor" component={renderColorSelector} />
            </div>
          )}
          {!isMale && (
            <div>
              <label htmlFor="employed">Employed</label>
              <div>
                <Field
                  name="employed"
                  id="employed"
                  component="input"
                  type="checkbox"
                />
              </div>
            </div>
          )}
          . . .
        </form>
      );
    };
    
    const mapStateToProps = state => ({
      sex: formValueSelector("wizard")(state, "sex")
    });
    WizardFormThirdPage = connect(mapStateToProps)(WizardFormThirdPage);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-02
      • 1970-01-01
      • 1970-01-01
      • 2022-01-26
      • 1970-01-01
      • 1970-01-01
      • 2017-10-24
      • 1970-01-01
      相关资源
      最近更新 更多