react使⽤antd的上传组件实现⽂件表单⼀起提交功能
(完整代码)
最近在刚刚开始使⽤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>
);
};
这⾥是⼀个表单⾥⾯包含了⼀个上传⽂件功能。(其实这⾥的代码就是Antd官⽅⽂档的例⼦,我只进⾏了删除多余部分,别的都是原样放着)。
下⾯做⼀下解释。
⾸先我们要思考怎么实现让⽂件不要⾃动上传。antd⽂档是有给⼀个⽅法的就是beforeUpload,当beforeUpload⽅法返回false时就会停⽌⽂件的上传。
以上就可以停⽌⽂件的⾃动上传。接下来,我们考虑怎么把上传的⽂件获取并存在传给后端的参数中。
这部分代码就是上传代码的⽅法,因为我们需要上传⽂件和表单⼀起提交。所以我们在这个⽅法⾥进⾏⼀些修改,把⽂件存在formData对象⾥。这⾥先说明⼀下formData对象,主要就是⽤来传⽂件给后端⽤的。
先new⼀个formData对象,在把⽂件append进去,这样就已经把上传的⽂件存在了formData⾥。
表单中其它数据也可以通过同种⽅法存在formData中,把formData传给后端即可。
此时还有⼀个需要注意的问题。
fetch(url, {
//fetch请求
method: 'POST',
body: formData,
})
或
axios({ //axios
method: 'post',
react to dourl: 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>
);
};
到此这篇关于react使⽤antd的上传组件实现⽂件表单⼀起提交的⽂章就介绍到这了,更多相关react实现⽂件表单提交内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论