微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用redux-form如何处理来自父提交的多个表单值

如何解决使用redux-form如何处理来自父提交的多个表单值

我的上级组件具有几个不同的选项卡。 每个选项卡都包含一个表单。 我需要通过1从父组件提交点击来处理所有表单值。

我设法使其按预期工作,但它会在每个输入上重新呈现整个组件。

我该如何在每次输入更改时降低rerenderint父组件。

如何仅在handleSubmit函数获取所有表单值?

这里是一个例子:

import React,{ Component } from 'react';
import { Row,Col,Nav,NavItem,Tab } from 'react-bootstrap';
import Button from 'react-bootstrap/lib/Button';

class Project extends Component {
  //constructor and life cycle here

  handleSubmit = () => {
    //here i need to get all forms values and forms validation without re rendering the whole component on each input change
  };

  render() {
    return (
      <div>
        <Tab.Container>
          <Row className="clearfix">
            <Col sm={3}>
              <Nav bsstyle="pills" stacked className="side-tabs">
                <NavItem eventKey="item1"> form1 </NavItem>
                <NavItem eventKey="item2"> form2 </NavItem>
                <NavItem eventKey="item3"> form3 </NavItem>
                <NavItem eventKey="item4"> form4 </NavItem>
              </Nav>
            </Col>
            <Col sm={9}>
              <Tab.Content animation={false}>
                <Tab.Pane eventKey="item1">
                  <FormComponent1 onSubmit={() => {}} />
                </Tab.Pane>
                <Tab.Pane eventKey="item2">
                  <FormComponent2 onSubmit={() => {}} />
                </Tab.Pane>
                <Tab.Pane eventKey="item3">
                  <FormComponent3 onSubmit={() => {}} />
                </Tab.Pane>
                <Tab.Pane eventKey="item4">
                  <FormComponent4 onSubmit={() => {}} />
                </Tab.Pane>
              </Tab.Content>
            </Col>
          </Row>
        </Tab.Container>
        <Row>
          <Col sm={12}>
            <Button type="submit" onClick={this.handleSubmit}>
              Submit
            </Button>
          </Col>
        </Row>
      </div>
    );
  }
}

const mapStatetoProps = state => {
  return {
    error: state.projects.error || state.projects.error,loading: !!state.projects.loading && state.projects.loading,// here is my way how i did this,BUT this cause whole component to rerender on each input change
    // this is huge performance issue
    form1: getFormValues('form1')(state),form2: getFormValues('form2')(state),form3: getFormValues('form3')(state),form4: getFormValues('form4')(state),isValidform1: isValid('form1')(state),isValidform2: isValid('form2')(state),isValidform3: isValid('form3')(state),isValidform4r: isValid('form4')(state),isDirtyform1: isDirty('form1')(state),isDirtyform2: isDirty('form2')(state),isDirtyform3: isDirty('form3')(state),isDirtyform4: isDirty('form4')(state),};
};

const mapdispatchToProps = dispatch => {
  return {
    //some api function here
  };
};

export default connect(mapStatetoProps,mapdispatchToProps)(Project);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。