Reactjs 如何使用ANTD react创建多步骤表单

Reactjs 如何使用ANTD react创建多步骤表单,reactjs,Reactjs,Hello everonye我正在尝试用antd步骤制作一个多步骤表单,在最后一步,我想从以前的组件收集所有数据/状态并提交给firebase,但是我的问题是如何将表单的状态/值传递给最后的提交步骤?如果可能的话,我希望避免使用redux //显示步骤的主要组件 import PropTypes from 'prop-types'; import classNames from 'classnames'; import { Menu, Icon, Button, Popover, Badge

Hello everonye我正在尝试用antd步骤制作一个多步骤表单,在最后一步,我想从以前的组件收集所有数据/状态并提交给firebase,但是我的问题是如何将表单的状态/值传递给最后的提交步骤?如果可能的话,我希望避免使用redux

//显示步骤的主要组件

import PropTypes from 'prop-types';
import classNames from 'classnames';
import { Menu,  Icon, Button, Popover, Badge } from 'antd';
import Header from './Header';
import First from './First';
import React, { Component } from 'react';
import  { useState } from 'react';
import "antd/dist/antd.css";

import firebase from './Firebase';
import {
  Form,
  Input,
  Tooltip,
  Cascader,
  Tag,
  Select,
  Row,
  Col,
  Option,InputNumber,
  Checkbox,

  AutoComplete,
} from 'antd';
import Second from "./Second";
import Third from "./Third";
import { QuestionCircleOutlined } from '@ant-design/icons';

import { Steps,  message } from "antd";
const Step = Steps.Step;

const steps = [
  {
    title: "",
    content: <First />
  },
  {
    title: "",
    content: <Second />
  },
  {
    title: "",
    content: <Third />
  }
];

const AutoCompleteOption = AutoComplete.Option;




class Help extends Component {




          next() {
             const current = this.state.current + 1;
             // console.log(current)
             this.setState({ current });
           }
           prev() {
             const current = this.state.current - 1;
             // console.log(current)
             this.setState({ current });
           }
           render() {
             const { current } = this.state;
             console.log(current);
             return (
               <div>

                 <Header isMobile={this.state.isMobile} />
                 <br/>
                 <Steps current={current}>
                   {steps.map(item => <Step key={item.title} title={item.title} />)}
                 </Steps>
                 <div className="steps-content">{steps[this.state.current].content}</div>
                 <div className="steps-action">
                   {this.state.current < steps.length - 1 && (
                     <Button type="primary" onClick={() => this.next()}>
                       Next
                     </Button>
                   )}
                   {this.state.current === steps.length - 1 && (
                     <Button
                       type="primary"
                       onClick={() => message.success("Processing complete!")}
                     >
                       Done
                     </Button>
                   )}
                   {this.state.current > 0 && (
                     <Button style={{ marginLeft: 8 }} onClick={() => this.prev()}>
                       Previous
                     </Button>
                   )}
                 </div>
               </div>
             );
           }
         }







export default Help;
从“道具类型”导入道具类型;
从“类名称”导入类名称;
从“antd”导入{菜单、图标、按钮、弹出框、徽章};
从“./头”导入头;
首先从“./First”导入;
从“React”导入React,{Component};
从“react”导入{useState};
导入“antd/dist/antd.css”;
从“/firebase”导入firebase;
进口{
形式,
输入,
工具提示,
卡斯特,
标签,
选择,
一行
上校,
选项,输入编号,
复选框,
自动完成,
}来自‘antd’;
从“/Second”导入秒;
从“/Third”导入第三个;
从“@ant design/icons”导入{QuestionCircleOutlined};
从“antd”导入{Steps,message};
常量步骤=步骤。步骤;
常数步长=[
{
标题:“,
内容:
},
{
标题:“,
内容:
},
{
标题:“,
内容:
}
];
const AutoCompleteOption=AutoComplete.Option;
类帮助扩展组件{
下一个(){
const current=this.state.current+1;
//console.log(当前)
this.setState({current});
}
prev(){
const current=this.state.current-1;
//console.log(当前)
this.setState({current});
}
render(){
const{current}=this.state;
console.log(当前);
返回(

{steps.map(item=>)} {步骤[this.state.current].content} {this.state.current 下一个 )} {this.state.current===steps.length-1&&( message.success(“处理完成!”)} > 多恩 )} {this.state.current>0&&( this.prev()}> 以前的 )} ); } } 导出默认帮助;
first.js

import React, { Component } from "react";


class First extends Component {

  constructor() {
     super();

    this.ref = firebase.firestore().collection('requests');
    this.state = {
    title: 'fff',
    zip: '11',
    supply:[],
    lat:'',
    long:'',
    address:'ff',
    description: '',
    author: '',
    email: ''
  };

   }

      render() {
        return (
          <div>
             <Form.Item label="First Name">
             <Input placeholder="input placeholder" style={{width:"25%"}}
              value={this.state.title}
              onChange={(e) => this.setState({title: e.target.value})}
             />
            </Form.Item>
          </div>
        );
      }
    }

    export default First;
import React,{Component}来自“React”;
类首先扩展组件{
构造函数(){
超级();
this.ref=firebase.firestore().collection('requests');
此.state={
标题:“fff”,
zip:'11',
供应:[],
拉丁语:'',
长:“,
地址:"ff",,
说明:“”,
作者:'',
电子邮件:“”
};
}
render(){
返回(
this.setState({title:e.target.value})
/>
);
}
}
首先导出默认值;
//这里应该介绍如何从前面的步骤中获取最终数据

Third.js



import PropTypes from 'prop-types';
import classNames from 'classnames';
import { Menu,  Icon, Button, Popover, Badge } from 'antd';
import Header from './Header';
import React, { Component } from 'react';
import  { useState } from 'react';
import "antd/dist/antd.css";

import firebase from './Firebase';
import {
  Form,
  Input,
  Tooltip,
  Cascader,
  Tag,
  Select,
  Row,
  Col,
  Option,InputNumber,
  Checkbox,

  AutoComplete,
} from 'antd';
import { QuestionCircleOutlined } from '@ant-design/icons';

const AutoCompleteOption = AutoComplete.Option;



class First extends Component {
  constructor() {
     super();

     this.ref = firebase.firestore().collection('requests');
      this.state = {
    title: 'fff',
    zip: '11',
    supply:[],
    lat:'',
    long:'',
    address:'ff',
    description: '',
    author: '',
    email: ''
  };
   }





        handleSubmit = (e) => {

          alert('ldld');
            e.preventDefault();

            const { title, email, address, lat ,author, long , zip ,description, supply } = this.state;

            this.ref.add({
              title,
              description,
              author,
              address,
              zip,
              email,
              supply,

            }).then((docRef) => {
              this.setState({
                title: '',
                description: '',
                author: '',
                supply:'',
                zip:'',
                emailL:''
              });
              this.props.history.push("/")
            })
            .catch((error) => {
              console.error("Error adding document: ", error);
            });
          }

  render(){




 return(

  <div>

  <Form

       layout="horizontal"

         onSubmit={this.handleSubmit}

      >

        <Form.Item label="First Name">
          <Input placeholder="input placeholder" style={{width:"25%"}}
           value={this.state.title}
        onChange={(e) => this.setState({title: e.target.value})}
             />
        </Form.Item>

);
}
}




export default Third;
Third.js
从“道具类型”导入道具类型;
从“类名称”导入类名称;
从“antd”导入{菜单、图标、按钮、弹出框、徽章};
从“./头”导入头;
从“React”导入React,{Component};
从“react”导入{useState};
导入“antd/dist/antd.css”;
从“/firebase”导入firebase;
进口{
形式,
输入,
工具提示,
卡斯特,
标签,
选择,
一行
上校,
选项,输入编号,
复选框,
自动完成,
}来自‘antd’;
从“@ant design/icons”导入{QuestionCircleOutlined};
const AutoCompleteOption=AutoComplete.Option;
类首先扩展组件{
构造函数(){
超级();
this.ref=firebase.firestore().collection('requests');
此.state={
标题:“fff”,
zip:'11',
供应:[],
拉丁语:'',
长:“,
地址:"ff",,
说明:“”,
作者:'',
电子邮件:“”
};
}
handleSubmit=(e)=>{
警报(“ldld”);
e、 预防默认值();
const{title,email,address,lat,author,long,zip,description,supply}=this.state;
此为参考添加({
标题
描述
作者
地址:,
齐普,
电子邮件,
供给
})。然后((docRef)=>{
这是我的国家({
标题:“”,
说明:“”,
作者:'',
供应:'',
zip:“”,
电子邮件:''
});
this.props.history.push(“/”)
})
.catch((错误)=>{
console.error(“添加文档时出错:”,错误);
});
}
render(){
返回(
this.setState({title:e.target.value})
/>
);
}
}
出口违约第三;

Hi,您解决问题了吗?Hi,您解决问题了吗?