react使用antd的上传组件实现文件表单一起提交功能(完整代码)


Posted in Javascript onJune 29, 2021

最近在刚刚开始使用react做项目,非常不熟练,非常小白。小白同学可以阅读了,因为我会写的非常简单,直白。

项目中需要实现表单中带附件提交,上传文件不单独保存调接口。

import { Form, Button, Upload } from 'antd';
import { UploadOutlined } from '@ant-design/icons';
  
  const normFile = (e) => {
    console.log('Upload event:', e);
    if (Array.isArray(e)) {
      return e;
    }
    return e && e.fileList;
  };
  const Demo = () => {
    const onFinish = (values) => {
      console.log('Received values of form: ', values);
    };
  
    return (
      <Form
        name="validate_other"
        onFinish={onFinish}
        initialValues={{
          'input-number': 3,
          'checkbox-group': ['A', 'B'],
          rate: 3.5,
        }}
      >
        <Form.Item
          name="upload"
          label="Upload"
          valuePropName="fileList"
          getValueFromEvent={normFile}
        >
          <Upload name="logo" action="/upload.do" listType="picture">
            <Button icon={<UploadOutlined />}>Click to upload</Button>
          </Upload>
        </Form.Item>
      </Form>
    );
  };
  
  ReactDOM.render(<Demo />, mountNode);

这里是一个表单里面包含了一个上传文件功能。(其实这里的代码就是Antd官方文档的例子,我只进行了删除多余部分,别的都是原样放着)。

下面做一下解释。

首先我们要思考怎么实现让文件不要自动上传。antd文档是有给一个方法的就是beforeUpload,当beforeUpload方法返回false时就会停止文件的上传。

react使用antd的上传组件实现文件表单一起提交功能(完整代码)

react使用antd的上传组件实现文件表单一起提交功能(完整代码)

以上就可以停止文件的自动上传。接下来,我们考虑怎么把上传的文件获取并存在传给后端的参数中。

react使用antd的上传组件实现文件表单一起提交功能(完整代码)

这部分代码就是上传代码的方法,因为我们需要上传文件和表单一起提交。所以我们在这个方法里进行一些修改,把文件存在formData对象里。这里先说明一下formData对象,主要就是用来传文件给后端用的。

react使用antd的上传组件实现文件表单一起提交功能(完整代码)

先new一个formData对象,在把文件append进去,这样就已经把上传的文件存在了formData里。

表单中其它数据也可以通过同种方法存在formData中,把formData传给后端即可。

此时还有一个需要注意的问题。

fetch(url, {

        //fetch请求

        method: 'POST',

        body: formData,

})

axios({ //axios
        method: 'post',
        url: url,
        data: formData,
    })
    .then(function (response) {
        console.log(response);
    })
    .catch(function (error) {
        console.log(error);
    });

一定要设置了,才可以传参数成功,不然调用接口的时候是不会成功带参数的。

什么样子是成功带了参数呢,可以在相关页面点击F12查看,network,最下方会有Form Data,一栏,会展示所有传过去的参数。

最终代码如下:

import { Form, Button, Upload } from 'antd';
import { UploadOutlined } from '@ant-design/icons';
  
  const normFile = (e) => {
    console.log('Upload event:', e);
    if (Array.isArray(e)) {
      return e;
    }
    return e && e.fileList;
  };
  const beforeUpload = ({fileList}) => {
      return  false;
  }
  const Demo = () => {
    const onFinish = (values) => {
      console.log('Received values of form: ', values);
    };
  
    return (
      <Form
        name="validate_other"
        onFinish={onFinish}
        initialValues={{
          'input-number': 3,
          'checkbox-group': ['A', 'B'],
          rate: 3.5,
        }}
      >
        <Form.Item
          name="upload"
          label="Upload"
          valuePropName="fileList"
          getValueFromEvent={normFile}
        >
          <Upload name="logo"  
            beforeUpload={beforeUpload}
          >
            <Button icon={<UploadOutlined />}>Click to upload</Button>
          </Upload>
        </Form.Item>
      </Form>
    );
  };
  
  ReactDOM.render(<Demo />, mountNode);

到此这篇关于react使用antd的上传组件实现文件表单一起提交的文章就介绍到这了,更多相关react实现文件表单提交内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
ExtJS 2.0实用简明教程 之Ext类库简介
Apr 29 Javascript
js如何判断用户是在PC端和还是移动端访问
Apr 24 Javascript
js运动动画的八个知识点
Mar 12 Javascript
js实现prototype扩展的方法(字符串,日期,数组扩展)
Jan 14 Javascript
javascript html5移动端轻松实现文件上传
Mar 27 Javascript
jquery实现(textarea)placeholder自动换行
Dec 22 Javascript
详谈jQuery unbind 删除绑定事件 / 移除标签方法
Mar 02 Javascript
Angular2 组件通信的实例代码
Jun 23 Javascript
angular学习之从零搭建一个angular4.0项目
Jul 10 Javascript
JS高级技巧(简洁版)
Jul 29 Javascript
JS实现点星星消除小游戏
Mar 24 Javascript
vue实现登录功能
Dec 31 Vue.js
vue+element ui实现锚点定位
Jun 29 #Vue.js
vue实现锚点定位功能
适合后台管理系统开发的12个前端框架(小结)
原生JavaScript实现简单五子棋游戏
Jun 28 #Javascript
javascript拖曳互换div的位置实现示例
Node实现搜索框进行模糊查询
React + Threejs + Swiper 实现全景图效果的完整代码
You might like
用js实现预览待上传的本地图片
2007/03/15 Javascript
让回调函数 showResponse 也带上参数的代码
2007/08/13 Javascript
firefox浏览器下javascript 拖动层效果与原理分析代码
2007/12/04 Javascript
javascript 设置某DIV区域内的checkbox复选框
2009/11/30 Javascript
使用Grunt.js管理你项目的应用说明
2013/04/24 Javascript
Ext JS 4实现带week(星期)的日期选择控件(实战二)
2013/08/21 Javascript
node.js中的fs.lchown方法使用说明
2014/12/16 Javascript
Angular 2父子组件数据传递之@ViewChild获取子组件详解
2017/07/04 Javascript
JavaScript之创意时钟项目(实例讲解)
2017/10/23 Javascript
JS小球抛物线轨迹运动的两种实现方法详解
2017/12/20 Javascript
Angular实现的简单定时器功能示例
2017/12/28 Javascript
nodejs多版本管理总结
2018/04/03 NodeJs
vue实现组件之间传值功能示例
2018/07/13 Javascript
element-ui 表格数据时间格式化的方法
2018/08/24 Javascript
JavaScript 斐波那契数列 倒序输出 输出100以内的质数代码实例
2019/09/11 Javascript
微信小程序 轮播图实现原理及优化详解
2019/09/29 Javascript
JavaScript中使用Spread运算符的八种方法总结
2020/06/18 Javascript
详解vue3.0 的 Composition API 的一种使用方法
2020/10/26 Javascript
python xml.etree.ElementTree遍历xml所有节点实例详解
2016/12/04 Python
用django-allauth实现第三方登录的示例代码
2019/06/24 Python
Html5页面点击遮罩层背景关闭遮罩层
2020/11/30 HTML / CSS
泰国综合购物网站:Lazada泰国
2018/04/09 全球购物
Juice Beauty官网:有机美容产品,护肤与化妆品
2020/06/13 全球购物
新浪网技术部笔试题
2016/08/26 面试题
事业单位请假制度
2014/01/13 职场文书
应届大学生简历中的自我评价
2014/01/15 职场文书
清明节扫墓活动方案
2014/03/02 职场文书
信息服务专业毕业生求职信
2014/03/02 职场文书
简洁的英文求职信范文
2014/05/03 职场文书
党员批评与自我批评材料
2014/10/14 职场文书
2014年部门工作总结
2014/11/12 职场文书
小学教师2014年度工作总结
2014/12/03 职场文书
2015年公路路政个人工作总结
2015/07/24 职场文书
2016公司新年问候语
2015/11/11 职场文书
2017寒假社会实践心得体会范文
2016/01/14 职场文书
PhpSpreadsheet中文文档 | Spreadsheet操作教程实例
2021/04/01 PHP