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 相关文章推荐
JS实现仿百度输入框自动匹配功能的示例代码
Feb 19 Javascript
JQuery 实现在同一页面锚点链接之间的平滑滚动
Oct 29 Javascript
纯JavaScript实现的兼容各浏览器的添加和移除事件封装
Mar 28 Javascript
jQuery中animate动画第二次点击事件没反应
May 07 Javascript
jquery实现左右无缝轮播图
Jul 31 Javascript
完美的js div拖拽实例代码
Sep 24 Javascript
AngularJS通过ng-route实现基本的路由功能实例详解
Dec 13 Javascript
JS中如何实现复选框全选功能
Dec 19 Javascript
JS改变页面颜色源码分享
Feb 24 Javascript
Vue中Table组件Select的勾选和取消勾选事件详解
Mar 19 Javascript
基于JavaScript获取base64图片大小
Oct 18 Javascript
JS实现京东商品分类侧边栏
Dec 11 Javascript
vue+element ui实现锚点定位
Jun 29 #Vue.js
vue实现锚点定位功能
适合后台管理系统开发的12个前端框架(小结)
原生JavaScript实现简单五子棋游戏
Jun 28 #Javascript
javascript拖曳互换div的位置实现示例
Node实现搜索框进行模糊查询
React + Threejs + Swiper 实现全景图效果的完整代码
You might like
给海燕B411配件机起死回生配上件
2021/03/02 无线电
PHP 使用MySQL管理Session的回调函数详解
2013/06/21 PHP
几道坑人的PHP面试题 试试看看你会不会也中招
2014/08/19 PHP
php实现的网页版剪刀石头布游戏示例
2016/11/25 PHP
PHP二维数组去重算法
2016/12/17 PHP
本地图片预览(支持IE6/IE7/IE8/Firefox3)经验总结
2013/03/25 Javascript
Node.js刷新session过期时间的实现方法推荐
2016/05/18 Javascript
jQuery实现点击表格单元格就可以编辑内容的方法【测试可用】
2016/08/01 Javascript
JS实现将Asp.Net的DateTime Json类型转换为标准时间的方法
2016/08/02 Javascript
jQuery EasyUI 折叠面板accordion的使用实例(分享)
2017/12/25 jQuery
详解如何在react中搭建d3力导向图
2018/01/12 Javascript
webpack4.x开发环境配置详解
2018/08/04 Javascript
jquery判断滚动条距离顶部的距离方法
2018/09/05 jQuery
cnpm加速Angular项目创建的方法
2018/09/07 Javascript
详解在create-react-app使用less与antd按需加载
2018/12/06 Javascript
OpenLayers实现图层切换控件
2020/09/25 Javascript
js删除指定位置超链接中含有百度与360的标题
2021/01/06 Javascript
Python中super()函数简介及用法分享
2016/07/11 Python
Python调用ctypes使用C函数printf的方法
2017/08/23 Python
Python编程求质数实例代码
2018/01/31 Python
django传值给模板, 再用JS接收并进行操作的实例
2018/05/28 Python
python同时遍历数组的索引和值的实例
2018/11/15 Python
Django 日志配置按日期滚动的方法
2019/01/31 Python
Python基本语法之运算符功能与用法详解
2019/10/22 Python
python编写微信公众号首图思路详解
2019/12/13 Python
python几种常用功能实现代码实例
2019/12/25 Python
css3 矩阵的使用详解
2018/03/20 HTML / CSS
html5适合移动应用开发的12大特性
2014/03/19 HTML / CSS
Skyscanner波兰:廉价航班
2017/11/07 全球购物
台湾专柜女包:KINAZ
2019/12/26 全球购物
师范教师毕业鉴定
2014/01/13 职场文书
五年级语文教学反思
2014/01/30 职场文书
农村文化活动总结
2014/08/28 职场文书
2014年9.18纪念日演讲稿
2014/09/14 职场文书
质检员工作总结2015
2015/04/25 职场文书
html form表单基础入门案例讲解
2021/07/15 HTML / CSS