【问题标题】:Redux- form : get and show all values of a wizard form before submitRedux-form:在提交之前获取并显示向导表单的所有值
【发布时间】:2017-09-18 06:57:16
【问题描述】:

我是初学者,因此在提交表单之前访问和显示向导表单中的所有值时遇到了一些问题。我正在尝试创建一个“预览组件”,让用户在提交之前检查所有值。这是我的 WIzardFormPreview 组件

import React from 'react';
import {Field, reduxForm} from 'redux-form';
import { Values } from 'redux-form-website-template';
import {connect} from "react-redux";
import validate from '../middleware/validate';

let WizardFormPreview = props => {

const {handleSubmit, pristine, previousPage, submitting} = props;

return (
    <form onSubmit={handleSubmit} className="form-horizontal">
        <div className="step-3">

            <div>{familyFlag}</div>
            <div>
                <button type="button" className="previous" onClick={previousPage}>
                    Previous
                </button>
                <button type="submit" disabled={pristine || submitting}>Submit</button>
            </div>
        </div>
    </form>
  );
};
export default reduxForm({
form: 'wizard', 
destroyOnUnmount: false, 
forceUnregisterOnUnmount: true, 
validate,
})(WizardFormPreview);

WizardFormPreview = connect(
state => ({
    values: {
        family : state.form.wizard.values.familyFlag
    }
})
)(WizardFormPreview)

我收到“familyFlag is not defined”(据我了解,这不应该是),但我不知道如何使其可用。仅供参考,输入 familyFlag 存在于表单的第一步中。

如何从向导表单中获取所有值并显示它?感谢您的帮助。

【问题讨论】:

    标签: javascript forms reactjs redux-form


    【解决方案1】:

    redux-form 有一个选择器getFormValues,它返回一个包含整个表单值的对象。问题是,根据this bug reportvalues 是一个保留名称。我一改名,它就起作用了。但后来,它也可以使用保留字values。它是否是一个错误 - 仍然不确定。我在下面发布了我的完整代码(它使用values),它可能会对某人有所帮助。

    import React from 'react';
    import {Field, reduxForm, values, getFormValues } from 'redux-form';
    import {connect} from "react-redux";
    import validate from '../middleware/validate';
    
    const FetchValues = connect(state => ({
    values: getFormValues('wizard')(state),
    }))(({ values }) =>
    
    <div>
        <p>Check if everything is alright.</p>
            <div className="row">
                <div className="col-xs-12">
                    <h6>Your Name</h6>
                </div>
                <div className="col-xs-12">
                    <p>{values.name}</p>
                </div>
            </div>
    
        <div className="row">
            <div className="col-xs-12">
                <h6>Are you part of a family?</h6>
            </div>
            <div className="col-xs-12">
                <p>{values.familyFlag}</p>
            </div>
        </div>
    </div>)
    
    
    let WizardFormPreview = (props) => {
    
    const {handleSubmit, pristine, previousPage, submitting} = props;
    
    return (
        <form onSubmit={handleSubmit} className="form-horizontal">
            <div className="step-3">
    
                <FetchValues/>
                <div>
                    <button type="button" className="previous" onClick={previousPage}>
                        Previous
                    </button>
                    <button type="submit" disabled={pristine || submitting}>Submit</button>
                </div>
            </div>
        </form>
    );
    };
    
    export default reduxForm({
    form: 'wizard', 
    destroyOnUnmount: false,
    forceUnregisterOnUnmount: true, 
    validate,
    })(WizardFormPreview);
    

    感谢 github 上的 @danielrob,他提供了一个工作示例。

    【讨论】:

      【解决方案2】:

      您还没有在WizardFormPreview 组件中定义familyFlag

      你需要从像这样的道具中获取它

      let WizardFormPreview = props => {
      
      const {handleSubmit, pristine, previousPage, values, submitting} = props;
      const {family: familyFlag} = values;
      
      return (
          <form onSubmit={handleSubmit} className="form-horizontal">
              <div className="step-3">
      
                  <div>{familyFlag}</div>
                  <div>
                      <button type="button" className="previous" onClick={previousPage}>
                          Previous
                      </button>
                      <button type="submit" disabled={pristine || submitting}>Submit</button>
                  </div>
              </div>
          </form>
        );
      };
      

      【讨论】:

      • 谢谢。现在表单呈现,但我看不到 familyFlag 的值。它显示未定义。
      • 检查 state.form.wizard.values.familyFlag 是否在 mapStateToProps 中定义
      • redux-form 有一个getFormValues 对象,但根据this question,它需要组件中的({values})。你能帮我一些语法吗?如何同时传递 props 和 values?我想我也需要道具,才能正确提交表格。我为这个超级愚蠢的问题道歉。
      • 我可能已经找到了问题所在。显然values 是保留名称。这个github issue 帮助了我。一旦我设法完成它,我会更新完整的结果。再次非常感谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-06
      相关资源
      最近更新 更多