在react-antd中弹出层form内容传递给父组件的操作


Posted in Javascript onOctober 24, 2020

我就废话不多说了,大家还是直接看代码吧~

子组件:

// jshint esversion:6
import React, { Component } from 'react';
import { Form, Input} from 'antd';

const FormItem = Form.Item;

class Forms extends Component{
 getItemsValue = ()=>{ //3、自定义方法,用来传递数据(需要在父组件中调用获取数据)
  const values= this.props.form.getFieldsValue();  //4、getFieldsValue:获取一组输入控件的值,如不传入参数,则获取全部组件的值
  return values;
 }
 render(){
  const { form } = this.props;
  const { getFieldDecorator } = form; //1、将getFieldDecorator 解构出来,用于和表单进行双向绑定
  return(
   <Form layout="vertical">
    <FormItem label="姓名">
     {getFieldDecorator('name')( //2、getFieldDecorator 的使用方法,这种写法真的很蛋疼
      <Input />
     )}
    </FormItem>
    <FormItem label="年龄">
     {getFieldDecorator('age')(
      <Input />
     )}
    </FormItem>
    <FormItem label="城市">
     {getFieldDecorator('address')(
      <Input />
     )}
    </FormItem>
   </Form>
  )
 }
}

export default Form.create()(Forms); //创建form实例

父组件:

import React, { Component } from 'react';
import { Modal } from 'antd';
import Forms from './Forms'

export default class Modals extends Component {
 handleCancel = () => {
  this.props.closeModal(false);
 }
 handleCreate = () => {
  console.log(this.formRef.getItemsValue());  //6、调用子组件的自定义方法getItemsValue。注意:通过 this.formRef 才能拿到数据
  this.props.getFormRef(this.formRef.getItemsValue());
  this.props.closeModal(false);
 }
 render() {
  const { visible } = this.props;
  return (
   <Modal
    visible={visible}
    title="新增"
    okText="保存"
    onCancel={this.handleCancel}
    onOk={this.handleCreate}
   >
    <Forms
     wrappedComponentRef={(form) => this.formRef = form}  //5、使用wrappedComponentRef 拿到子组件传递过来的ref(官方写法)
    />
   </Modal>
  );
 }
}

补充知识:react+antd组件 modal里面包裹使用form表单并获取提交事件

1 先上图

在react-antd中弹出层form内容传递给父组件的操作

在react-antd中弹出层form内容传递给父组件的操作

我这里是点击“修改密码”那个按钮,然后跳到了modal框。(大家这里可以随便写一个按钮,然后给他一个点击事件让他可以显示modal框就好了,我这里着重讲解标题的内容)

2 贴代码

const [visible, setVisible] = useState(false);//antd 控制modal是否显示
const showMoal=()=>{
 // console.log("showMoal")
 setVisible(true);
}
const handleCancel = e => {
// console.log("cancel:",e);
setVisible(false);
};

function updatePasswordChange(){
 // console.log("0000");
 setVisible(false);
}

//Modal框
 <Modal
  title="密码修改"
  visible={visible}
  onCancel={handleCancel}
  footer={null}
 >
  
  <UpdatePassword updatePasswordChange={updatePasswordChange}></UpdatePassword>
</Modal>


//Form表单的提交事件
const onFinish = values => {
  // console.log('Success:', values); 
  IsUpdatePassword.commit(session.environment,values.newpassword,values.oldpassword,(response, errors) => {
    if (errors) {
     message.error(errors[0].message);
    } else {
     //修改密码成功
     message.success('修改密码成功!');
     props.updatePasswordChange();
    }
   },
   (errors) => {
    message.error(errors.source.errors[0].message);
   })
  
};

//Form表单部分
return(
  <>
   <Form
    {...layout}
    name="密码修改"
    initialValues={{
     remember: true,
    }}
    onFinish={onFinish}
    onFinishFailed={onFinishFailed}
   >
    <Form.Item
     label="旧密码"
     name="oldpassword"
     rules={[
     {
      required: true,
      message: '请输入旧密码!',
     },
     ]}
    >
     <Input.Password />
    </Form.Item>

    <Form.Item
     label="新密码"
     name="newpassword"
     rules={[
     {
      required: true,
      message: '请输入新密码!',
     },
     ]}
     hasFeedback
    >
     <Input.Password />
    </Form.Item>

    <Form.Item
     name="confirm"
     label="确认新密码"
     dependencies={['newpassword']}
     hasFeedback
     rules={[
     {
      required: true,
      message: '请确认新密码!',
     },
     ({ getFieldValue }) => ({
      validator(rule, value) {
      if (!value || getFieldValue('newpassword') === value) {
       return Promise.resolve();
      }
      return Promise.reject('两次新密码不一致!');
      },
     }),
     ]}
    >
     <Input.Password />
    </Form.Item>


    {/* <Form.Item {...tailLayout} name="remember" valuePropName="checked">
     <Checkbox>Remember me</Checkbox>
    </Form.Item> */}

    <Form.Item {...tailLayout}>
     <Row>
      <Col span={12}>
       <Button type="primary" htmlType="submit">
       确认
       </Button>
      </Col>
      <Col span={12}>
       <Button onClick={props.updatePasswordChange}>
       取消
       </Button>
      </Col>
     </Row>
    </Form.Item>
   </Form>
  </>
 );
}

小结:

上面的代码你看起来可能有点乱,而且也运行不起来,那是肯定的!因为我只粘贴了整个项目的一部分。

下面我来点睛:modal里面使用form表单并获取提交事件主要是使用了modal的**footer={null}**这个特性把外面的“确认取消按键隐藏”,然后使用我们自己的Form的“确定取消”按键,然后再通过Form的onFinish 事件来提交值和控制modal框的显示与消失。

就ok了!

以上这篇在react-antd中弹出层form内容传递给父组件的操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
HTML IMG标签 onload 内存溢出导致浏览器CPU占用过高
Mar 09 Javascript
jquery 上下滚动广告
Jun 17 Javascript
jQuery1.3.2 升级到jQuery1.4.4需要修改的地方
Jan 06 Javascript
jQuery基本选择器选择元素使用介绍
Apr 18 Javascript
javascript常用代码段搜集
Dec 04 Javascript
jQuery在线选座位插件seat-charts特效代码分享
Aug 27 Javascript
JavaScript接口的实现三种方式(推荐)
Jun 14 Javascript
ReactNative Image组件使用详解
Aug 07 Javascript
vue组件的写法汇总
Apr 12 Javascript
d3.js实现图形拖拽
Dec 19 Javascript
在react中使用vue的状态管理的方法示例
May 02 Javascript
一篇文章告诉你如何实现Vue前端分页和后端分页
Feb 18 Vue.js
Antd下拉选择,自动匹配功能的实现
Oct 24 #Javascript
在react项目中使用antd的form组件,动态设置input框的值
Oct 24 #Javascript
Vue-Ant Design Vue-普通及自定义校验实例
Oct 24 #Javascript
解决vue打包报错Unexpected token: punc的问题
Oct 24 #Javascript
解决vue项目axios每次请求session不一致的问题
Oct 24 #Javascript
解决vue中使用less/sass及使用中遇到无效的问题
Oct 24 #Javascript
vue中是怎样监听数组变化的
Oct 24 #Javascript
You might like
同一空间绑定多个域名而实现访问不同页面的PHP代码
2006/12/06 PHP
PHP 执行系统外部命令 system() exec() passthru()
2009/08/11 PHP
php 计算两个时间戳相隔的时间的函数(小时)
2009/12/18 PHP
Windows和Linux中php代码调试工具Xdebug的安装与配置详解
2014/05/08 PHP
ThinkPHP的L方法使用简介
2014/06/18 PHP
VB中的RasEnumConnections函数返回632错误解决方法
2014/07/29 PHP
PHP版本如何选择?应该使用哪个版本?
2015/05/13 PHP
Thinkphp5框架异常处理操作实例分析
2020/06/03 PHP
基于jquery的inputlimiter 实现字数限制功能
2010/05/30 Javascript
Javascript的setTimeout()使用闭包特性时需要注意的问题
2014/09/23 Javascript
JS实现alert中显示换行的方法
2015/12/17 Javascript
AngularJs Understanding the Controller Component
2016/09/02 Javascript
原生JS实现的放大镜效果实例代码
2016/10/15 Javascript
easyui关于validatebox实现多重规则验证的方法(必看)
2017/04/12 Javascript
vue中echarts3.0自适应的方法
2018/02/26 Javascript
vue获取当前点击的元素并传值的实例
2018/03/09 Javascript
JS中的事件委托实例浅析
2018/03/22 Javascript
antd组件Upload实现自己上传的实现示例
2018/12/18 Javascript
JS回调函数简单易懂的入门实例分析
2019/09/29 Javascript
JavaScript 严格模式(use strict)用法实例分析
2020/03/04 Javascript
[14:51]DOTA2 HEROS教学视频教你分分钟做大人-卓尔游侠
2014/06/13 DOTA
[37:21]完美世界DOTA2联赛PWL S2 Inki vs Magma 第二场 11.22
2020/11/24 DOTA
[01:07:34]DOTA2-DPC中国联赛定级赛 RNG vs Aster BO3第二场 1月9日
2021/03/11 DOTA
python操作字典类型的常用方法(推荐)
2016/05/16 Python
python定时利用QQ邮件发送天气预报的实例
2017/11/17 Python
Python3.5 + sklearn利用SVM自动识别字母验证码方法示例
2019/05/10 Python
教你一步步利用python实现贪吃蛇游戏
2019/06/27 Python
原来我一直安装 Python 库的姿势都不对呀
2019/11/11 Python
pycharm双击无响应(打不开问题解决办法)
2020/01/10 Python
解决Django部署设置Debug=False时xadmin后台管理系统样式丢失
2020/04/07 Python
python 模拟登陆github的示例
2020/12/04 Python
护士毕业生自我鉴定
2014/02/08 职场文书
民间借贷借条范本
2015/05/25 职场文书
丧事酒宴答谢词
2015/09/30 职场文书
Navicat连接MySQL错误描述分析
2021/06/02 MySQL
一文弄懂MySQL中redo log与binlog的区别
2022/02/15 MySQL