Ant Design父组件一次性获取子组件表单值_antd 父组件获取子组件的值-程序员宅基地

技术标签: 前端  es6  reactjs  Ant Design Pro  javascript  

文章目录

业务需求

父组件获取子组件数值,子组件是一个表单,包含Cascader、Select两种类型组件,其中能源类型Select根据Cascader数值拿到,效果如图:
在这里插入图片描述
其中antd版本3.26.3

实现思路

通过使用 onFieldsChange获取表单值,通过回调函数传给父组件。antd官方说明

父组件


  // changedFields是子组件表单变化值,allFields是子组件表单所有值
  handleSearchBarFormChange = (changedFields, allFields) => {
    
    const obj = {
    
      buildingId: allFields.buildings.value[1],
      energySort: allFields.sorts.value,
      year: allFields.year.value,
    };

    if (obj.buildingId !== null && obj.energySort !== null && obj.year !== null) {
    
      this.generateTreeData(this.pageType, obj.buildingId, obj.energySort);
      this.setState({
    
        searchBar: obj,
      });
    }
  };


 render() {
    
    return (
        <EnergySortSearchBar
        // 父组件通过onChange获得子组件表单值
       onChange={
    this.handleSearchBarFormChange}
       initState={
    this.handleInitSearchBarValues}
      />
    );
  }

子组件

@Form.create({
    
  onFieldsChange(props, changedFields, allFields) {
    
  // 关键在这里,通过onFieldsChange获取表单变化值以及表单所有值,
  // 通过回调函数传给父组件
    props.onChange(changedFields, allFields); 
  },
})
class EnergySortSearchBar extends PureComponent {
     

 /**
   * 渲染建筑级联Cascade
   */
  renderBuildingCascade = () => {
    
    // 省略部分代码
    return (
      <FormItem name="buildings" label="建筑名称" labelCol={
    8} wrapperCol={
    16}>
        {
    getFieldDecorator(`buildings`, {
    
          initialValue,
        })(<Cascader {
    ...cProps} className={
    styles.item} onChange={
    this.handleBuildingChange} />)}
      </FormItem>
    );
  };
  
  /**
   * 渲染能源种类Select
   */
  renderEnergySorts = () => {
    
   // 省略部分代码
    return (
      <FormItem label="分类能耗" labelCol={
    8} wrapperCol={
    16}>
        {
    getFieldDecorator(`sorts`, {
    
          initialValue: sorts !== null ? sorts[0].name : null,
        })(
          <Select changeOnSelect placeholder="请选择能耗" className={
    styles.item}>
            {
    this.renderOptions(sorts)}
          </Select>
        )}
      </FormItem>
    );
  };
  /**
   * 渲染YearPicker
   * @return JSX
   */
  renderYearPicker = () => {
    
   // 省略部分代码
    return (
      <FormItem label="年份" labelCol={
    8} wrapperCol={
    16}>
        {
    getFieldDecorator(`year`, {
    
          initialValue: moment().format('YYYY'),
        })(<YearPicker onChange={
    this.handleYear} className={
    styles.item} displayDefaultTime />)}
      </FormItem>
    );
  };


render() {
    
      // 省略部分代码

    return (
      <div className={
    styles.tableListForm}>
        <Form layout="inline">
          <Row gutter={
    16} type="flex">
            <Col span={
    6}>{
    this.renderBuildingCascade()}</Col> /
            <Col span={
    4}>{
    this.renderEnergySorts()}</Col>
            <Col span={
    4}>{
    this.renderYearPicker()}</Col>
          </Row>
        </Form>
      </div>
    );
  }
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_34307801/article/details/105710314

智能推荐

python 今日头条视频自动上传_抖音视频怎么上传到今日头条?这个软件可一键操作很方便...-程序员宅基地

文章浏览阅读894次。随着技术的不断发展,从16年到现在,小视频产业的确有热度,其没有操作壁垒、内容充分得到曝光、小额付出就有超值回报的闪光点,不停的吸引着无数想出人头地的人,为了掌握最喜人的曝光总量,人们一般会使用所有的媒体平台。可是当我们真的着手运营账号,就会明白:每天必须要做这些事:一个个账号输入密码登陆,后面再按次序上传做好的图文,肯定是浪费了太多不该浪费的时间,下面我有一套经验,免费分享给你。 进入软件界面后..._头条号上传视频python

0018-量化第五天:QMT—日内回转回测注释_qmt 回测时间 为什么是当前一周-程序员宅基地

文章浏览阅读2.8k次,点赞3次,收藏12次。日内做T算法框架_qmt 回测时间 为什么是当前一周

随笔记录-程序员宅基地

文章浏览阅读70次。软件开发环境是指在基本硬件和宿主软件的基础上,为支持系统软件和应用软件的工程化开发和维护而使用的一组软件,简称SDE。它由软件工具和环境集成机制构成,前者用以支持软件开发的相关过程,活动和任务,后者为集成和软件的开发,维护及管理提供统一的支持。项目部署环境一般可以分为三种:生产环境,测试环境,开发环境。开发环境:开发环境时程序员专门用于开发的服务器,配置可以比较随意,为了开发调试方便,一般打...

20190723 架构师-形成技术体系_软件架构师专业技术体系-程序员宅基地

文章浏览阅读315次。1、spring cloud的五大神兽和服务治理。2、软件开发流程:概要设计 详细设计,数据库设计,dao层编码,service层编码,功能接口定义。3、三高问题的解决方案(性能优化方案,都是为了解决三高问题)4、jvm虚拟机体系(内存,GC,调优,常用命令以及图形化工具;章节目录)5、mysql数据库体系(索引,执行计划,架构,资源消耗;章节目录)当下正在解决的问题、请教安栋..._软件架构师专业技术体系

Linux 多线程编程(Pthread 库)学习笔记 三_pthread_mutes_lock-程序员宅基地

文章浏览阅读904次。线程的数据处理 之 互斥锁互斥锁互斥锁用来保证一段时间内只有一个线程在执行一段代码pthread_mutex_lock声明开始用互斥锁上锁,此后的代码直至调用pthread_mutex_unlock为止,均被上锁,即同一时间只能被一个线程调用执行。当一个线程执行到pthread_mutex_lock处时,如果该锁此时被另一个线程使用,那此线程被阻塞,即程序将等待到另一个线程释放此互_pthread_mutes_lock

树莓派入坑指南——系统初始化配置及常见Q&A_树莓派file es.list is being edited by-程序员宅基地

文章浏览阅读7.9k次,点赞8次,收藏29次。笔者抱着很纠结的心态写下了此文,仅以纪念我N刷系统的落寞。。。 本文基于RaspberryPi Model 3B,以Ubuntu-Mate(16.04.3)和Raspbian(2017-07-05-raspbian-jessie)系统配置为例。 现将常见初始化配置流程整理如下,供广大网友参考。_树莓派file es.list is being edited by

随便推点

语义分割之全卷积网络FCN论文阅读及代码实现_fcn论文原文-程序员宅基地

文章浏览阅读940次。今天来看一篇复古的文章,Full Convolutional Networks 即全卷积神经网络,这是 2015 年的一篇语义分割方向的文章,是一篇比较久远的开山之作。因为最近在研究语义分割方向,所以还是决定先从这个鼻祖入手,毕竟后面的文章很多都借鉴了这篇文章的思想,掌握好基础我们才能飞的更高。本篇文章分为两部分: 论文解读与代码实现。论文地址: Fully Convolutional Netw..._fcn论文原文

Mybatis-plus查询时某些字段为null-程序员宅基地

文章浏览阅读1.4w次,点赞4次,收藏4次。在网站上搜索得到的是mybatis配置中需要添加一段配置驼峰命名法mybatis:configuration:map-underscore-to-camel-case: true但在公司项目中这个配置是已经配置的了,经过测试还是无法获取正确的值经过自己查看代码后发现,是字段无法映射到对应的实体上,即charging_name(entity)->charging_name(da..._mybatis plus中collection 一些字段是null

Java堆内存初始大小_initialheapsize 默认大小-程序员宅基地

文章浏览阅读5.2k次。Java堆内存初始大小大厂面试题:1、JVM垃圾回收时候如何确定垃圾?是否知道什么是GC Roots2、你说你做过JVM参数调优和参数配置,请问如何盘点查看JVM系统默认值3、你平时工作中用过的JVM常用基本配置参数有哪些?4、强引用、软引用、弱引用、虚引用费别是什么?5、请你谈谈对OOM的认识6、GC垃圾回收算法与垃圾收集器的关系?分别是什么请你谈谈?7、 怎么查..._initialheapsize 默认大小

Cookie 跨域解决方案(顶级域名和子级域名之间的Cookie共享、修改、删除)_顶级域名和子域名存在跨域吗-程序员宅基地

文章浏览阅读4.4k次。最近项目中刚好涉及到了主域名和子域名之间的共享和相互修改、删除,也就借此机会总结一下常用的几个场景,域名的话就拿顶级域名和二级域名为例,其他的场景都是类似。一、设置COOKIE1、顶级域名顶级域名只能设置domain为顶级域名,不能设置为二级域名或者三级域名等等,否则cookie无法生成:如yangbai.com能设置domain为yangbai.com或者www.yangbai.com,但不能设置domain为login.yangbai.com,这样cookie不会生成。以下面的代码为例:_顶级域名和子域名存在跨域吗

计算文本相似度-Word2Vec计算_java word2vec 语义相似度-程序员宅基地

文章浏览阅读1.2w次,点赞5次,收藏56次。来源于https://juejin.im/post/5b237b45f265da59a90c11d6Word2Vec,顾名思义,其实就是将每一个词转换为向量的过程。如果不了解的话可以参考:https://blog.csdn.net/itplus/article/details/37969519这里我们可以直接下载训练好的 Word2Vec 模型,模型的链接地址为:https://pan.b..._java word2vec 语义相似度

关于Ubuntu20.04下向日葵远程软件连接中断的解决方法-程序员宅基地

文章浏览阅读5.1k次,点赞4次,收藏11次。关于Ubuntu20.04下向日葵远程软件连接中断的解决方法关于Ubuntu20.04下向日葵远程软件连接中断的解决方法一、安装并登陆好Ubuntu的向日葵客户端后二、切换lightdm图形页面关于Ubuntu20.04下向日葵远程软件连接中断的解决方法一、安装并登陆好Ubuntu的向日葵客户端后在终端下运行以下命令sudo apt-get updatesudo apt-get upgradesudo apt-get install lightdm在安装lightdm时选择lightdm二