Отправить данные, введенные пользователем, из одного компонента в другой в реагирующе-избыточном виде?

Мне нужно просмотреть введенные пользователем входные данные для пользователя, прежде чем сохранять их в БД.

В этом компоненте я проверяю входные данные Step1.js

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

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 составная часть? Нужно ли хранить данные перед отправкой в ​​другой компонент?

Как мне это сделать?

Любая помощь приветствуется.

Спасибо

1 ответ

Короче говоря, вы можете сделать это, следуя концепции формы мастера.

Так что если у вас есть 3 шага, то ваши 3 формы должны быть настроены так же, как показано ниже:

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)

Таким образом, все, что вы заполняете в Шаге 1, Шаг 2, Шаг 3, будет храниться только в одном месте в вашем Магазине. Он будет расположен в: state.form.wizard,

Поэтому, когда вы успешно отправите Шаг 1 (проверка будет запущена для каждого шага), на следующем Шаге (Шаг 2) вы получите доступ к уже отправленным данным Шаг 1 через state.form.wizzard, Та же логика действительна для всех остальных шагов.

Здесь очень хорошо задокументировано, как сделать форму мастера (с помощью библиотеки redux-form).


Если мастер не в вашем случае, вы можете легко получить доступ к значениям формы через formValueSelector следующим образом:

import { formValueSelector } from 'redux-form' // ES6

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

  return { firstName }
}
Другие вопросы по тегам