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 Object.extend
May 18 Javascript
JS中的public和private对象,即static修饰符
Jan 18 Javascript
JS动态加载当前时间的方法
Feb 09 Javascript
懒加载实现的分页&amp;&amp;网站footer自适应
Dec 21 Javascript
详解JavaScript常量定义
Jan 03 Javascript
基于jQuery实现一个marquee无缝滚动的插件
Mar 09 Javascript
js中编码函数:escape,encodeURI与encodeURIComponent详解
Mar 21 Javascript
基于ionic实现下拉刷新功能
May 10 Javascript
Vue实现数据表格合并列rowspan效果
Nov 30 Javascript
node.JS事件机制与events事件模块的使用方法详解
Feb 06 Javascript
详解webpack-dev-middleware 源码解读
Mar 23 Javascript
Vue实现图书管理小案例
Dec 03 Vue.js
vue+element ui实现锚点定位
Jun 29 #Vue.js
vue实现锚点定位功能
适合后台管理系统开发的12个前端框架(小结)
原生JavaScript实现简单五子棋游戏
Jun 28 #Javascript
javascript拖曳互换div的位置实现示例
Node实现搜索框进行模糊查询
React + Threejs + Swiper 实现全景图效果的完整代码
You might like
一个可以找出源代码中所有中文的工具
2006/10/25 PHP
php pack与unpack 摸板字符字符含义
2009/10/29 PHP
PHP在线生成二维码(google api)的实现代码详解
2013/06/04 PHP
深入PHP内存相关的功能特性详解
2013/06/08 PHP
WordPress开发中的get_post_custom()函数使用解析
2016/01/04 PHP
php时间计算相关问题小结
2016/05/09 PHP
xml文档转换工具,附图表例子(hta)
2010/11/17 Javascript
jquery 卷帘效果实现代码(不同方向)
2013/02/05 Javascript
js弹出模式对话框,并接收回传值的方法
2013/03/12 Javascript
JQuery的自定义事件代码,触发,绑定简单实例
2013/08/01 Javascript
JS将秒换成时分秒实现代码
2013/09/03 Javascript
基于JavaScript实现鼠标悬浮弹出跟随鼠标移动的带箭头的信息层
2016/01/18 Javascript
BootStrap CSS全局样式和表格样式源码解析
2017/01/20 Javascript
webpack写jquery插件的环境配置
2017/12/21 jQuery
微信小程序实现弹出菜单功能
2018/06/12 Javascript
Vue2.0学习系列之项目上线的方法步骤(图文)
2018/09/25 Javascript
tracking.js页面人脸识别插件使用方法
2020/04/16 Javascript
微信小程序页面间跳转传参方式总结
2019/06/13 Javascript
vue setInterval 定时器失效的解决方式
2020/07/30 Javascript
Vue中使用JsonView来展示Json树的实例代码
2020/11/16 Javascript
Python with的用法
2014/08/22 Python
浅谈python中的getattr函数 hasattr函数
2016/06/14 Python
django批量导入xml数据
2016/10/16 Python
详解常用查找数据结构及算法(Python实现)
2016/12/09 Python
Django如何实现上传图片功能
2019/08/16 Python
pygame库实现俄罗斯方块小游戏
2019/10/29 Python
python 一维二维插值实例
2020/04/22 Python
python实现无边框进度条的实例代码
2020/12/30 Python
HTML5拖拽文件上传的示例代码
2021/03/04 HTML / CSS
英文版餐饮运营管理求职信
2013/11/06 职场文书
小学生防溺水广播稿
2014/01/12 职场文书
出生医学证明样本
2014/01/17 职场文书
董事长秘书职责
2014/01/31 职场文书
植树节标语
2014/06/27 职场文书
2015年高校图书馆工作总结
2015/04/30 职场文书
Nginx的gzip相关介绍
2022/05/11 Servers