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 相关文章推荐
JavaScript中常见陷阱小结
Apr 27 Javascript
jQuery的控件及事件(输入控件及回车事件)使用示例
Jul 25 Javascript
node.js中的buffer.length方法使用说明
Dec 14 Javascript
浅谈JavaScript中运算符的优先级
Jul 07 Javascript
javascript数组去重的六种方法汇总
Aug 16 Javascript
jQuery取得iframe中元素的常用方法详解
Jan 14 Javascript
vuejs在解析时出现闪烁的原因及防止闪烁的方法
Sep 19 Javascript
完美解决手机网页中输入框被输入法遮挡的问题
Dec 19 Javascript
Express进阶之log4js实用入门指南
Feb 10 Javascript
Angular4 反向代理Details实践
May 30 Javascript
jquery获取input输入框中的值
Nov 13 jQuery
浅谈Vue使用Cascader级联选择器数据回显中的坑
Oct 31 Javascript
vue+element ui实现锚点定位
Jun 29 #Vue.js
vue实现锚点定位功能
适合后台管理系统开发的12个前端框架(小结)
原生JavaScript实现简单五子棋游戏
Jun 28 #Javascript
javascript拖曳互换div的位置实现示例
Node实现搜索框进行模糊查询
React + Threejs + Swiper 实现全景图效果的完整代码
You might like
PHP4实际应用经验篇(2)
2006/10/09 PHP
php获取从百度搜索进入网站的关键词的详细代码
2014/01/08 PHP
两千行代码的PHP学习笔记汇总
2014/10/05 PHP
PHP实现删除多重数组对象属性并重新赋值的方法
2017/06/07 PHP
Jquery CheckBox全选方法代码附js checkbox全选反选代码
2010/06/09 Javascript
NodeJS的url截取模块url-extract的使用实例
2013/11/18 NodeJs
Js控制滑轮左右滑动实例
2015/02/13 Javascript
Jquery 全选反选实例代码
2015/11/19 Javascript
AngularGauge 属性解析详解
2016/09/06 Javascript
Vue2.0 vue-source jsonp 跨域请求
2017/08/04 Javascript
Vue引用第三方datepicker插件无法监听datepicker输入框的值的解决
2018/01/27 Javascript
讲解vue-router之什么是嵌套路由
2018/05/28 Javascript
jQuery实现的五星点评功能【案例】
2019/02/18 jQuery
vue+django实现一对一聊天功能的实例代码
2019/07/17 Javascript
elementui更改el-dialog关闭按钮的图标d的示例代码
2020/08/04 Javascript
jQuery中getJSON跨域原理的深入讲解
2020/09/02 jQuery
在Windows8上的搭建Python和Django环境
2014/07/03 Python
import的本质解析
2017/10/30 Python
分享一个简单的python读写文件脚本
2017/11/25 Python
分享6个隐藏的python功能
2017/12/07 Python
Pycharm导入Python包,模块的图文教程
2018/06/13 Python
在ubuntu16.04中将python3设置为默认的命令写法
2018/10/31 Python
python实现一组典型数据格式转换
2018/12/15 Python
python单线程文件传输的实例(C/S)
2019/02/13 Python
Numpy一维线性插值函数的用法
2020/04/22 Python
python可迭代对象去重实例
2020/05/15 Python
瑞典时尚服装购物网站:Miinto.se
2017/10/30 全球购物
第一范式(1NF)、第二范式(2NF)和第三范式(3NF)之间的区别是什么?
2016/04/28 面试题
什么是ARP(Address Resolution Protocol)地址解析协议
2013/10/31 面试题
怎样客观的做好自我评价
2013/12/28 职场文书
大学生创业项目方案
2014/03/08 职场文书
求职信怎么写
2014/05/23 职场文书
四风问题对照检查整改措施思想报告
2014/10/05 职场文书
2014年企业党建工作总结
2014/12/18 职场文书
Python如何解决secure_filename对中文不支持问题
2021/07/16 Python
vue3语法糖内的defineProps及defineEmits
2022/04/14 Vue.js