- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) > web開(kāi)發(fā) > JavaScript >
- react使用antd的上傳組件實(shí)現文件表單一起提交功
最近在剛剛開(kāi)始使用react做項目,非常不熟練,非常小白。小白同學(xué)可以閱讀了,因為我會(huì )寫(xiě)的非常簡(jiǎn)單,直白。
項目中需要實(shí)現表單中帶附件提交,上傳文件不單獨保存調接口。
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);
這里是一個(gè)表單里面包含了一個(gè)上傳文件功能。(其實(shí)這里的代碼就是Antd官方文檔的例子,我只進(jìn)行了刪除多余部分,別的都是原樣放著(zhù))。
下面做一下解釋。
首先我們要思考怎么實(shí)現讓文件不要自動(dòng)上傳。antd文檔是有給一個(gè)方法的就是beforeUpload,當beforeUpload方法返回false時(shí)就會(huì )停止文件的上傳。
以上就可以停止文件的自動(dòng)上傳。接下來(lái),我們考慮怎么把上傳的文件獲取并存在傳給后端的參數中。
這部分代碼就是上傳代碼的方法,因為我們需要上傳文件和表單一起提交。所以我們在這個(gè)方法里進(jìn)行一些修改,把文件存在formData對象里。這里先說(shuō)明一下formData對象,主要就是用來(lái)傳文件給后端用的。
先new一個(gè)formData對象,在把文件append進(jìn)去,這樣就已經(jīng)把上傳的文件存在了formData里。
表單中其它數據也可以通過(guò)同種方法存在formData中,把formData傳給后端即可。
此時(shí)還有一個(gè)需要注意的問(wèn)題。
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); });
一定要設置了,才可以傳參數成功,不然調用接口的時(shí)候是不會(huì )成功帶參數的。
什么樣子是成功帶了參數呢,可以在相關(guān)頁(yè)面點(diǎn)擊F12查看,network,最下方會(huì )有Form Data,一欄,會(huì )展示所有傳過(guò)去的參數。
最終代碼如下:
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);
到此這篇關(guān)于react使用antd的上傳組件實(shí)現文件表單一起提交的文章就介紹到這了,更多相關(guān)react實(shí)現文件表單提交內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站