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基础资料整理3 正则
Dec 06 Javascript
jQuery插件的写法分享
Jun 12 Javascript
Javascript中封装window.open解决不兼容问题
Sep 28 Javascript
用jquery模仿的a的title属性的例子
Oct 22 Javascript
jQuery实现向下滑出的二级菜单效果实例
Aug 22 Javascript
BootStrap中的表单大全
Sep 07 Javascript
jQuery内存泄露解决办法
Dec 13 Javascript
Jquery实时监听input value的实例
Jan 26 Javascript
jQuery 实现左右两侧菜单添加、移除功能
Jan 02 jQuery
vue中使用cropperjs的方法
Mar 01 Javascript
javascript实现简单打字游戏
Oct 29 Javascript
OpenLayer3自定义测量控件MeasureTool
Sep 28 Javascript
vue+element ui实现锚点定位
Jun 29 #Vue.js
vue实现锚点定位功能
适合后台管理系统开发的12个前端框架(小结)
原生JavaScript实现简单五子棋游戏
Jun 28 #Javascript
javascript拖曳互换div的位置实现示例
Node实现搜索框进行模糊查询
React + Threejs + Swiper 实现全景图效果的完整代码
You might like
ThinkPHP采用模块和操作分析
2011/04/18 PHP
php数组相加 array(“a”)+array(“b”)结果还是array(“a”)
2012/09/19 PHP
php对图像的各种处理函数代码小结
2013/07/08 PHP
OAuth认证协议中的HMACSHA1加密算法(实例)
2017/10/25 PHP
phpinfo无法显示的原因及解决办法
2019/02/15 PHP
JavaScript入门教程(1) 什么是JS
2009/01/31 Javascript
理解Javascript_13_执行模型详解
2010/10/20 Javascript
json的前台操作和后台操作实现代码
2012/01/20 Javascript
Javascript 面向对象(一)(共有方法,私有方法,特权方法)
2012/05/23 Javascript
Javascript开发之三数组对象实例介绍
2012/11/12 Javascript
前端轻量级MVC框架CanJS详解
2014/09/26 Javascript
JavaScript中Function函数与Object对象的关系
2015/12/17 Javascript
微信小程序-获得用户输入内容
2017/02/13 Javascript
jQuery插件FusionCharts绘制的2D双柱状图效果示例【附demo源码】
2017/05/13 jQuery
Vue学习笔记进阶篇之多元素及多组件过渡
2017/07/19 Javascript
新手简单了解vue
2019/05/29 Javascript
微信小程序实现手势滑动效果
2019/08/26 Javascript
JS实现使用POST方式发送请求
2019/08/30 Javascript
electron 如何将任意资源打包的方法步骤
2020/04/16 Javascript
[01:33:14]LGD vs VP Supermajor 败者组决赛 BO3 第二场 6.10
2018/07/04 DOTA
在Python下尝试多线程编程
2015/04/28 Python
Python3 加密(hashlib和hmac)模块的实现
2017/11/23 Python
浅析Python pandas模块输出每行中间省略号问题
2018/07/03 Python
python itsdangerous模块的具体使用方法
2020/02/17 Python
css3实现图片遮罩效果鼠标hover以后出现文字
2013/11/05 HTML / CSS
canvas绘图按照contain或者cover方式适配并居中显示
2019/02/18 HTML / CSS
俄罗斯美容和健康网上商店:Созвездие Красоты
2019/07/23 全球购物
欧洲最大的高尔夫零售商:American Golf
2019/09/02 全球购物
运动会开幕式主持词
2014/03/28 职场文书
省级青年文明号申报材料
2014/05/23 职场文书
好听的队名和口号
2014/06/09 职场文书
职业规划实施方案
2014/06/10 职场文书
中职三好学生事迹材料
2014/08/24 职场文书
党员评议自我评价
2015/03/03 职场文书
入团介绍人意见范文
2015/06/04 职场文书
python实战之一步一步教你绘制小猪佩奇
2021/04/22 Python