zoukankan      html  css  js  c++  java
  • 002-pro ant design 表单基本使用、state赋值数据父子传输

    一、表单元素操作事项

    1、form 默认在prop中存在:this.props.form,直接使用即可

    2、重置:this.props.form.resetFields();

    3、赋值:form.setFieldsValue({ categoryId: select });

    4、取值校验:

        e.preventDefault();
        this.props.form.validateFields((err, values) => {
          if (!err) {
            dispatch({
              type: 'codeSync/actionRecycleInfo',
              payload: values,
              callback: response => {
                this.showChangeAction(response);
              },
            });
          }
        });

    二、state赋值

    1、普通赋值:  this.setState({ huanjieData: response.data });

    2、对象追加值:

         this.setState(
           Object.assign(this.state.changeData, { ...data }),
           () => {
             console.log(11, this.state);
           },
         );

    关于:Object.assign,可以参看:https://www.cnblogs.com/bjlhx/p/10288760.html

    3、父子组件传输state

    import React, { PureComponent, Fragment } from 'react';
    import { connect } from 'dva';
    import moment from 'moment';
    import {
      Row,
      Col,
      Card,
      Form,
      Input,
      Button,
      Modal,
      message,
      Badge,
      Dropdown,
      Menu,
      Icon,
      Select,
      Table,
      Divider,
      Tag,
      Radio,
    } from 'antd';
    import styles from './SyncCode.less';
    
    const FormItem = Form.Item;
    const RadioGroup = Radio.Group;
    const { Option } = Select;
    const { TextArea } = Input;
    
    // 批次数据新增弹层
    const SyncCodeChangeTraceAccount = Form.create()(props => {
        //接收父类参数
      const { showVisible, changeGetHuanJie, handleCategory, form, handleVisibleAction, itemData,huanjieData, templates } = props;
    
      // 创建批次确定提交功能
      const okHandleAdd = () => {
        alert('提交表单:' + JSON.stringify(itemData));
      };
    
      const onChangeTraceAccount = e => {
        const traceAccount = event.target.value;
        if (itemData.dataProvideTraceAccount == traceAccount) {
          message.error('替换供应商不能是当前账号');
          event.target.value = '';
        } else {
          //获取 模板
          const trace = { traceAccount: traceAccount };
          const select = handleCategory(trace);
          //select 参数组装
          form.setFieldsValue({ categoryId: select });
          changeGetHuanJie({ traceAccount: traceAccount, syncType: 2, categoryId: null });
        }
      };
    
      const onChangeCategoryId = (value, options) => {
        changeGetHuanJie({ categoryId: value });
      };
    
      const onChangeBatch = event => {
        changeGetHuanJie({ batchCode: event.target.value });
      };
    
    
    
    
    
      return (
        <Modal
          destroyOnClose
          title="变更追溯环节"
          onOk={okHandleAdd}
          visible={showVisible}
          // className={styles.batc、hModel}
          onCancel={() => handleVisibleAction()}
          width="80%"
          okText="确认变更"
        >
            <Table
              columns={columns2}
              dataSource={huanjieData}
              rowKey="dataType"
              locale={{ emptyText: '暂无数据' }}
              pagination={false}
            />
        </Modal>
      );
    });
    
    @connect(({ codeSync, loading }) => ({
      codeSync,
      // loading: loading.models.sweepcode,
    }))
    @Form.create()
    class SyncCode extends PureComponent {
      // 初始化状态值
      state = {
        huanjieData: [],
      };
    
      // 改变 获取环节信息
      changeGetHuanJie = data => {
        return this.handleHuanJie(data);
      };
      handleHuanJie = (changeData) => {
        const { dispatch } = this.props;
          dispatch({
            type: 'codeSync/actionQueryTacheList',
            payload: changeData,
            callback: response => {
              if (response.code == 20000) {
                this.setState({ huanjieData: response.data });
              } else {
                Modal.error({
                  title: '查询失败',
                  content: response.msg,
                });
              }
            },
        }
      };
      
      // 渲染批次数据列表界面
      render() {
        const {
          form: { getFieldDecorator },
        } = this.props;
    
        const {huanjieData, itemData,changeVisible} = this.state;
        //传输 父类方法到子类
        const parentMethods = {
          changeGetHuanJie: this.changeGetHuanJie,
          handleCategory: this.handleCategory,
          handleVisibleAction: this.showChangeAction,
        };
    
    
    
        return (
          <div style={{ background: '#ECECEC', padding: '30px' }}>
            <Table
              {...parentMethods}
              itemData={itemData}
              huanjieData={huanjieData}
              showVisible={changeVisible}
            />
          </div>
        );
      }
    }
    
    export default SyncCode;
    View Code

    过程:子类方法onChangeCategoryId控制父类方法changeGetHuanJie操作state,state设置了huanjieData,会通过组件定义绑定时候传输过去

    子类不要有太多操作。

  • 相关阅读:
    [Oracle] CPU/PSU补丁安装教程
    VMware vSphere 服务器虚拟化之二十 桌面虚拟化之准备虚拟桌面模版
    我是如何写作一本软件+哲学式的书籍的(上)
    设计模式(二)-- 外观模式(Facade)
    PPT资料下载
    Ajax实现xml文件数据插入数据库(一)--- 构建解析xml文件的js库
    Ajax实现xml文件数据插入数据库(二)--- ajax实现与jsp的数据交互。
    iOS-王云鹤 APP首次启动显示用户指导
    控制文件的备份与恢复
    Android事件分发机制完全解析,带你从源码的角度彻底理解(下)
  • 原文地址:https://www.cnblogs.com/bjlhx/p/10288860.html
Copyright © 2011-2022 走看看