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去掉字符串里的所有空格
Feb 08 Javascript
某页码显示的helper 少量调整,另附js版
Sep 12 Javascript
浅析JavaScript访问对象属性和方法及区别
Nov 16 Javascript
javascript使用闭包模拟对象的私有属性和方法
Oct 05 Javascript
easyui combotree加载静态数据问题(选不上)解决方法
Dec 26 Javascript
微信小程序 数组中的push与concat的区别
Jan 05 Javascript
ES6新特性:使用export和import实现模块化详解
Jul 31 Javascript
bootstrap multiselect下拉列表功能
Aug 22 Javascript
记录一篇关于redux-saga的基本使用过程
Aug 18 Javascript
jQuery+PHP实现上传裁剪图片
Jun 29 jQuery
layui点击数据表格添加或删除一行的例子
Sep 12 Javascript
浅谈vue-props的default写不写有什么区别
Aug 09 Javascript
vue+element ui实现锚点定位
Jun 29 #Vue.js
vue实现锚点定位功能
适合后台管理系统开发的12个前端框架(小结)
原生JavaScript实现简单五子棋游戏
Jun 28 #Javascript
javascript拖曳互换div的位置实现示例
Node实现搜索框进行模糊查询
React + Threejs + Swiper 实现全景图效果的完整代码
You might like
PHP大批量数据操作时临时调整内存与执行时间的方法
2011/04/20 PHP
php二维数组排序与默认自然排序的方法介绍
2013/04/27 PHP
ThinkPHP路由详解
2015/07/27 PHP
PHP中使用CURL发送get/post请求上传图片批处理功能
2018/10/15 PHP
PHP实现的微信公众号扫码模拟登录功能示例
2019/05/30 PHP
Js之软键盘实现(js源码)
2007/01/30 Javascript
10个基于Jquery的幻灯片插件教程
2010/10/29 Javascript
JavaScript高级程序设计 阅读笔记(十四) js继承机制的实现
2012/08/14 Javascript
快速查找数组中的某个元素并返回下标示例
2013/09/03 Javascript
js获取鼠标点击的位置实现思路及代码
2014/05/09 Javascript
基于jQuery实现仿百度首页选项卡切换效果
2016/05/29 Javascript
浅析Nodejs npm常用命令
2016/06/14 NodeJs
jQuery查找节点方法完整实例
2016/09/13 Javascript
D3.js实现柱状图的方法详解
2016/09/21 Javascript
微信小程序云开发之新手环境配置
2019/05/16 Javascript
微信小程序实现带参数的分享功能(两种方法)
2019/05/17 Javascript
利用JavaScript将Excel转换为JSON示例代码
2019/06/14 Javascript
微信小程序scroll-view锚点链接滚动跳转功能
2019/12/12 Javascript
jQuery实现的图片点击放大缩小功能案例
2020/01/02 jQuery
python判断windows系统是32位还是64位的方法
2015/05/11 Python
Python反射用法实例简析
2017/12/22 Python
Django处理文件上传File Uploads的实例
2018/05/28 Python
python实现定时压缩指定文件夹发送邮件
2020/12/22 Python
python实现点击按钮修改数据的方法
2019/07/17 Python
python pycharm最新版本激活码(永久有效)附python安装教程
2020/09/18 Python
Python selenium 加载并保存QQ群成员,去除其群主、管理员信息的示例代码
2020/05/28 Python
python爬虫中采集中遇到的问题整理
2020/11/27 Python
Python如何使用神经网络进行简单文本分类
2021/02/25 Python
HTML5之SVG 2D入门10—滤镜的定义及使用
2013/01/30 HTML / CSS
财务会计专业毕业生自荐信
2013/10/02 职场文书
人事专员岗位职责说明书
2014/07/30 职场文书
重点工程汇报材料
2014/08/27 职场文书
纪念九一八事变演讲稿:忘记意味着背叛
2014/09/14 职场文书
追讨欠款律师函
2015/05/27 职场文书
历史名人教你十五个读书方法,赶快Get起来!
2019/07/18 职场文书
Ajax实现异步加载数据
2021/11/17 Javascript