您好,登录后才能下订单哦!
本文小编为大家详细介绍“Ant Design_Form表单上传文件组件如何实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“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(); };
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",发现控制台的报错确实没有了;
但是新的问题来了,当我们上传文件的时候,画面直接崩了!!
Uncaught TypeError: (fileList || []).forEach is not a function
在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; };
这时候校验是没问题了,但是,如果你和我一样,新增的提交和编辑的提交公用的时候,这一块校验还是会有问题;编辑内容的时候我们拿到的是文件的URL地址,不是文件对象,那么校验就会一直过不去;
所以校验方法就需要改一下,判断条件也要加上URL,这一块就不贴代码了~
这里顺道提一下,ant design 中如果不想走默认的上传,就可以beforeUpload
身上做文章了,但是一定要注意拦截默认上传的条件是:
若返回 false
则停止上传。支持返回一个 Promise 对象,Promise 对象 reject 时则停止上传
因为我在这个方法开始的时候对文件的大小进行了限制,如果不满足就终止,但是,习惯性的写成了return
;这时候并没有阻止默认上传的行为;需要改写为return false。
读到这里,这篇“Ant Design_Form表单上传文件组件如何实现”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。