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 中String.match()与RegExp.exec()的区别说明
Jan 10 Javascript
关于JavaScript中的关联数组分析
Apr 09 Javascript
可自定义速度的js图片无缝滚动示例分享
Jan 20 Javascript
from表单多个按钮提交用onclick跳转不同action
Apr 24 Javascript
jquery中取消和绑定hover事件的实现代码
Jun 02 Javascript
微信小程序 五星评价功能的实现
Mar 09 Javascript
Angular2学习教程之ng中变更检测问题详解
May 28 Javascript
vue中v-cloak解决刷新或者加载出现闪烁问题(显示变量)
Apr 20 Javascript
JavaScript执行环境及作用域链实例分析
Aug 01 Javascript
解决vue点击控制单个样式的问题
Sep 05 Javascript
package.json配置文件构成详解
Aug 27 Javascript
mpvue微信小程序开发之实现一个弹幕评论
Nov 24 Javascript
vue+element ui实现锚点定位
Jun 29 #Vue.js
vue实现锚点定位功能
适合后台管理系统开发的12个前端框架(小结)
原生JavaScript实现简单五子棋游戏
Jun 28 #Javascript
javascript拖曳互换div的位置实现示例
Node实现搜索框进行模糊查询
React + Threejs + Swiper 实现全景图效果的完整代码
You might like
PHP新手上路(八)
2006/10/09 PHP
基于php 随机数的深入理解
2013/06/05 PHP
解读PHP中的垃圾回收机制
2015/08/10 PHP
php实现可逆加密的方法
2015/08/11 PHP
PHP命名空间(namespace)原理与用法详解
2019/12/11 PHP
编写跨浏览器的javascript代码必备[js多浏览器兼容写法]
2008/10/29 Javascript
JavaScript中实现块作用域的方法
2010/04/01 Javascript
JavaScript的Ext JS框架中的GridPanel组件使用指南
2016/05/21 Javascript
AngularJS中$http服务常用的应用及参数
2016/08/22 Javascript
js中获取键盘事件的简单实现方法
2016/10/10 Javascript
nodejs个人博客开发第四步 数据模型
2017/04/12 NodeJs
cropper js基于vue的图片裁剪上传功能的实现代码
2018/03/01 Javascript
nodejs 递归拷贝、读取目录下所有文件和目录
2019/07/18 NodeJs
vue实现整屏滚动切换
2020/06/29 Javascript
[00:12]2018DOTA2亚洲邀请赛SOLO赛 MidOne是否中单第一人?
2018/04/05 DOTA
Python open读写文件实现脚本
2008/09/06 Python
python3.3教程之模拟百度登陆代码分享
2014/01/16 Python
python实现比较两段文本不同之处的方法
2015/05/30 Python
使用py2exe在Windows下将Python程序转为exe文件
2016/03/04 Python
python 添加用户设置密码并发邮件给root用户
2016/07/25 Python
Python实现变量数值交换及判断数组是否含有某个元素的方法
2017/09/18 Python
python验证码识别的示例代码
2017/09/21 Python
Python爬虫之pandas基本安装与使用方法示例
2018/08/08 Python
用于业余项目的8个优秀Python库
2018/09/21 Python
python根据txt文本批量创建文件夹
2020/12/08 Python
python如何编写win程序
2020/06/08 Python
基于pytorch中的Sequential用法说明
2020/06/24 Python
Python延迟绑定问题原理及解决方案
2020/08/04 Python
html5 Canvas画图教程(10)—把面拆成线条模拟出圆角矩形
2013/01/09 HTML / CSS
HTML5 weui使用笔记
2019/11/21 HTML / CSS
意大利奢华内衣制造商:Cosabella
2017/08/29 全球购物
汇科协同Java笔试题
2012/03/31 面试题
【魔兽争霸3重制版】原版画面与淬火MOD画面对比
2021/03/26 魔兽争霸
优秀本科生求职推荐信
2014/02/24 职场文书
夫妻忠诚协议范文
2014/11/16 职场文书
助学金感谢信
2015/01/20 职场文书