首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否以react-redux-form将用户输入的表单数据从一个组件发送到另一个组件?

是否以react-redux-form将用户输入的表单数据从一个组件发送到另一个组件?
EN

Stack Overflow用户
提问于 2018-08-06 20:30:25
回答 1查看 449关注 0票数 1

我需要查看用户输入的用户输入数据,然后再将它们保存到数据库。

在此组件中,我将验证输入数据Step1.js

代码语言:javascript
复制
import React, { Component } from "react";
import { Button, Row, Col, Label } from "reactstrap";
import { Control, LocalForm, Errors } from "react-redux-form";

const required = val => val && val.length;
const maxLength = len => val => !val || val.length <= len;
const minLength = len => val => val && val.length >= len;
export default class Step1 extends Component {
  constructor(props) {
    super(props);
  }

  render() {
    // explicit class assigning based on validation

    return (
      <div className="step step3">
        <div className="row">
          <LocalForm>
            <div className="form-group">
              <label className="col-md-12 control-label">
                <h1>Step 1: Enter User Details</h1>
              </label>
            </div>
            <div className="form-group col-md-12 content form-block-holder">
              <Label htmlFor="firstname" className="control-label col-md-4">
                First Name
              </Label>
              <Col md={8}>
                <Control.text
                  model=".firstname"
                  id="firstname"
                  name="firstname"
                  placeholder="First Name"
                  className="form-control"
                  validators={{
                    required,
                    minLength: minLength(3),
                    maxLength: maxLength(15)
                  }}
                />
                <Errors
                  className="text-danger"
                  model=".firstname"
                  show="touched"
                  messages={{
                    required: "Required",
                    minLength: "Must be greater than 2 characters",
                    maxLength: "Must be 15 characters or less"
                  }}
                />
              </Col>
            </div>
          </LocalForm>
        </div>
      </div>
    );
  }
}

验证之后,我需要将输入发送到另一个组件Step2.js

代码语言:javascript
复制
import React, { Component } from 'react';
import Data from './Step3'
export default class Step2 extends Component {
  constructor(props) {
    super(props);
  };

  jumpToStep(toStep) {
    // We can explicitly move to a step (we -1 as its a zero based index)
    this.props.jumpToStep(toStep-1); // The StepZilla library injects this jumpToStep utility into each component
  }

  render() {
    return (
      <div className="step step5 review">
        <div className="row">
          <form id="Form" className="form-horizontal">
            <div className="form-group">
              <label className="col-md-12 control-label">
                <h1>Step 4: Review your Details and 'Save'</h1>
              </label>
            </div>
            <div className="form-group">
              <div className="col-md-12 control-label">
                <div className="col-md-12 txt">
                  <div className="col-md-4">
                    FirstName
                  </div>
                  <div className="col-md-4">
                    {this.props.FirstName} // How can i render my FIRSTNAME and display it here.
                  </div>
                </div>
                </div>
            </div>
          </form>
        </div>
      </div>
    )
  }
}

在此之后,我将发送数据到我的数据库。

问题:

如何将经过验证的数据从Step1传递到Step2组件?在将数据发送到另一个组件之前,我是否需要存储数据?

我该怎么做呢?

任何帮助都是非常感谢的。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2018-08-06 22:34:00

简而言之,您可以遵循向导窗体的概念来执行此操作。

因此,如果您有3个步骤,那么您的3个表单应该以相同的方式配置如下:

代码语言:javascript
复制
export default reduxForm({
  form: 'wizard', // <------ same form name for the 3 forms
  destroyOnUnmount: false, // <------ preserve form data
  forceUnregisterOnUnmount: true, // <------ unregister fields on unmount
  validate
})(WizardFormFirstPage)

这样做,您填写的Step1,Step2,Step3将只保存在您的商店中的一个地方。它将位于:state.form.wizard

因此,当您成功提交Step1 (每一步都会触发验证)时,在下一步(Step2)上,您将可以通过state.form.wizzard访问已经提交的Step1数据。同样的逻辑也适用于所有其他步骤。

Here's very well documented how to do a Wizard form (通过redux-form库)。

如果您不使用该向导,则可以通过formValueSelector轻松访问表单值,如下所示:

代码语言:javascript
复制
import { formValueSelector } from 'redux-form' // ES6

const mapStateToProps = state => {
  const selector = formValueSelector('myFormName')
  const firstName = selector(state, 'firstname')

  return { firstName }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51707690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档