在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 相关文章推荐
jQuery 拖动层(在可视区域范围内)
May 24 Javascript
前台js改变Session的值(用ajax实现)
Dec 28 Javascript
jquery通过ajax加载一段文本内容的方法
Jan 15 Javascript
jQuery的基本概念与高级编程
May 14 Javascript
Backbone.js的一些使用技巧
Jul 01 Javascript
Angular2内置指令NgFor和NgIf详解
Aug 03 Javascript
微信小程序获取循环元素id以及wx.login登录操作
Aug 17 Javascript
Vue.js中使用iView日期选择器并设置开始时间结束时间校验功能
Aug 12 Javascript
vue实现的网易云音乐在线播放和下载功能案例
Feb 18 Javascript
深入学习JavaScript中的bom
May 27 Javascript
vue.js 解决v-model让select默认选中不生效的问题
Jul 28 Javascript
vue项目里面引用svg文件并给svg里面的元素赋值
Aug 17 Javascript
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函数(ignore_user_abort)
2012/08/01 PHP
php多用户读写文件冲突的解决办法
2013/11/06 PHP
laravel安装和配置教程
2014/10/29 PHP
thinkphp微信开发(消息加密解密)
2015/12/02 PHP
浅谈laravel中的关联查询with的问题
2019/10/10 PHP
javascript学习笔记(五)正则表达式
2011/04/08 Javascript
跨域请求之jQuery的ajax jsonp的使用解惑
2011/10/09 Javascript
javascript简易缓动插件(源码打包)
2012/02/16 Javascript
jquery 利用show和hidden实现级联菜单示例代码
2013/08/09 Javascript
JQuery加载图片自适应固定大小的DIV
2013/09/12 Javascript
jquery实现图片翻页效果
2013/12/23 Javascript
jQuery实现拖拽可编辑模块功能代码
2017/01/12 Javascript
jQuery简易时光轴实现方法示例
2017/03/13 Javascript
jQuery修改DOM结构_动力节点Java学院整理
2017/07/05 jQuery
JS非行间样式获取函数的实例代码
2018/06/05 Javascript
vue中使用vue-print.js实现多页打印
2020/03/05 Javascript
el-table树形表格表单验证(列表生成序号)
2020/05/31 Javascript
Python中的urllib模块使用详解
2015/07/07 Python
Python写入数据到MP3文件中的方法
2015/07/10 Python
Python3编程实现获取阿里云ECS实例及监控的方法
2017/08/18 Python
python+opencv实现动态物体追踪
2018/01/09 Python
python实现批量图片格式转换
2020/06/16 Python
Python操作Excel插入删除行的方法
2018/12/10 Python
python的一些加密方法及python 加密模块
2019/07/11 Python
python随机生成大小写字母数字混合密码(仅20行代码)
2020/02/01 Python
什么是python的必选参数
2020/06/21 Python
基于OpenCV的路面质量检测的实现
2020/11/04 Python
pandas使用函数批量处理数据(map、apply、applymap)
2020/11/27 Python
Haglöfs瑞典官方网站:haglofs火柴棍,欧洲顶级户外品牌
2018/10/18 全球购物
Richards网上商店:当代时尚,遍布巴西
2019/11/03 全球购物
研究生自我鉴定范文
2013/10/30 职场文书
检举信的格式及范文
2014/04/04 职场文书
计算机专业毕业生自荐书
2014/06/02 职场文书
数学教师个人总结
2015/02/06 职场文书
Windows下redis下载、redis安装及使用教程
2021/06/02 Redis
spring boot实现文件上传
2022/08/14 Java/Android