Ant Design_Form表单上传文件组件实现详解

 更新时间:2023年03月07日 14:31:15   作者:coffee  
这篇文章主要为大家介绍了Ant Design_Form表单上传文件组件实现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

背景

需要实现的需求:在一个表单提交中,需要提交各种组件的提交信息,其中包括上传文件;一般呢,我们会在选择文件的时候将文件先传到服务器,拿到文件的URL,在提交表单的时候传的其实是文件的URL;

刚开始,对文件没有必填的校验,是比较简单的;但是后来要求文件是必传的,需要加上文件的校验,就暴漏了一些小问题;

实现

首先,先对Upload组件加上必传的校验

rules={[{ required: true, message: "请上传文件" }]},

直接添加required校验,肯定是不行的,我们需要自定义文件的校验;

dom结构大体是这样:

<Item label="上传文件" name="file" rules={[{ required: true, validator: checkFile }]}>
    <Upload {...uploadProps}>
            <div className="upload-content">
                    {imgUrl ? (
                            <div className="upload-cover">
                                    <img src={imgUrl} />
                            </div>
                    ) : (
                            <div className="upload-btn">{imgLoading ? <LoadingOutlined /> : <PlusOutlined />}</div>
                    )}
            </div>
    </Upload>
</Item>

校验:

const checkFile = (rule: any, value: any) => {
    if (!value) {
            return Promise.reject("请上传文件");
    }
    return Promise.resolve();
};

问题1:

warning.js:6 Warning: [antd: Upload] value is not a valid prop, do you mean fileList?

但是控制台报错:

warning.js:6 Warning: [antd: Upload] value is not a valid prop, do you mean fileList?

按照指示:在Item组件上加上:valuePropName="fileList",发现控制台的报错确实没有了;

但是新的问题来了,当我们上传文件的时候,画面直接崩了!!

问题2:

Uncaught TypeError: (fileList || []).forEach is not a function

参照官网:ant.design/components/…

在Item组件上添加getValueFromEvent事件;

<Item
        label="上传文件"
        name="file"
        valuePropName="fileList"
        rules={[{ required: true, validator: checkFile }]}
        getValueFromEvent={normFile}
>
const normFile = (e: any) => {
        if (Array.isArray(e)) {
                return e;
        }
        return e?.fileList;
};

最后效果:

tip1:注意一下新增和修改时校验方法

这时候校验是没问题了,但是,如果你和我一样,新增的提交和编辑的提交公用的时候,这一块校验还是会有问题;编辑内容的时候我们拿到的是文件的URL地址,不是文件对象,那么校验就会一直过不去;

所以校验方法就需要改一下,判断条件也要加上URL,这一块就不贴代码了~

tip2: 注意一下beforeUpload的返回值

这里顺道提一下,ant design 中如果不想走默认的上传,就可以beforeUpload身上做文章了,但是一定要注意拦截默认上传的条件是:

若返回 false 则停止上传。支持返回一个 Promise 对象,Promise 对象 reject 时则停止上传

因为我在这个方法开始的时候对文件的大小进行了限制,如果不满足就终止,但是,习惯性的写成了return;这时候并没有阻止默认上传的行为;需要改写为return false

以上就是Ant Design_Form表单上传文件组件实现详解的详细内容,更多关于Ant Design_Form表单上传文件组件的资料请关注脚本之家其它相关文章!

相关文章

  • Vue如何使用ElementUI对表单元素进行自定义校验及踩坑

    Vue如何使用ElementUI对表单元素进行自定义校验及踩坑

    有一些验证不是通过input select这样的受控组件来触发验证条件的 ,可以通过自定义验证的方法来触发,下面这篇文章主要给大家介绍了关于Vue如何使用ElementUI对表单元素进行自定义校验及踩坑的相关资料,需要的朋友可以参考下
    2023-02-02
  • vue 实现数字滚动增加效果的实例代码

    vue 实现数字滚动增加效果的实例代码

    最近做了个项目需要做数字滚动增加的效果,刚开始接到这个项目还真是懵了,后来发现实现代码很简单的,下面小编给大家带来了vue 实现数字滚动增加效果的实例代码,需要的朋友参考下吧
    2018-07-07
  • 实现elementUI表单的全局验证的方法步骤

    实现elementUI表单的全局验证的方法步骤

    这篇文章主要介绍了实现elementUI表单的全局验证的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • vue不用import直接调用实现接口api文件封装

    vue不用import直接调用实现接口api文件封装

    这篇文章主要为大家介绍了vue不用import直接调用实现接口api文件封装,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • 详解Vue.js分发之作用域槽

    详解Vue.js分发之作用域槽

    本篇文章主要介绍了详解Vue.js分发之作用域槽,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • vue拖拽改变宽度的实现示例

    vue拖拽改变宽度的实现示例

    本文主要介绍了vue拖拽改变宽度的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • Vue实现进度条变化效果

    Vue实现进度条变化效果

    这篇文章主要为大家详细介绍了Vue实现进度条变化效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • 非常实用的vue导航钩子

    非常实用的vue导航钩子

    这篇文章主要为大家分享了一个非常实用的vue导航钩子,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • Vue.js创建Calendar日历效果

    Vue.js创建Calendar日历效果

    这篇文章主要为大家详细介绍了Vue.js创建Calendar日历效果的过程,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • Vue高版本中一些新特性的使用详解

    Vue高版本中一些新特性的使用详解

    这篇文章主要介绍了Vue高版本中一些新特性的使用,需要的朋友可以参考下
    2018-09-09

最新评论