React裁剪上傳頭像

      網友投稿 1262 2022-05-29

      前言

      上傳頭像這個需求一般涉及用戶模塊的管理系統都會有,但是如果沒有裁剪這一步驟用戶體驗就會差一些。那么今天就帶大家使用 React + Ant Design 實現裁剪并上傳頭像這一功能。

      一、需求簡介

      有一個輸入維護用戶信息的彈窗,其中可以查看頭像并修改之,上傳之前需要對頭像進行裁剪(1:1),最后統一提交表單進行信息更新。

      二、開始編碼

      1. 查看文檔

      采用 Ant Design 文檔中提供的示例進行封裝。使用 Image 組件顯示圖片,Upload 組件進行上傳,借助 antd-img-crop 插件實現上傳前裁剪。此處附上官方文檔傳送門:上傳 Upload - Ant Design

      2. 修改示例代碼并封裝

      首先在 src/components 下新建文件夾 UploadAvatar 并新建 index.jsx ,然后對示例代碼進行修改:

      // src/components/UploadAvatar/index.jsx // 上傳頭像組件 import { useState } from 'react'; import { request } from 'umi'; import { Button, Image, message, Upload } from 'antd'; import ImgCrop from 'antd-img-crop'; import userAvatar from '@/assets/images/common/user-avatar.svg';// 默認頭像 /** * @param avatar 傳入頭像 * @param setAvatar 設置頭像方法 */ const UploadAvatar = ({ avatar, setAvatar }) => { // * 按鈕loading const [loading, setLoading] = useState(false); // todo 上傳前校驗 const beforeUpload = file => { const isJpgOrPng = file.type === 'image/jpeg' || file.type === 'image/png'; if (!isJpgOrPng) { message.error('請上傳(JPG/PNG)圖片!'); return Upload.LIST_IGNORE; }; const isLt2M = file.size / 1024 / 1024 < 10; if (!isLt2M) { message.error('請上傳10M以內的圖片!'); return Upload.LIST_IGNORE; }; return isJpgOrPng && isLt2M; }; // * Upload配置 const uoloadProps = { showUploadList: false, beforeUpload, onChange: ({ file: { status } }) => { switch (status) { case 'uploading': setLoading(true); break; case 'done': setLoading(false); }; }, customRequest: async ({ file }) => { const formData = new FormData(); formData.append('avatarfile', file); try { // xxx 為圖片上傳地址 const { data } = await request('/xxx', { method: 'POST', data: formData }); if (data) { setAvatar(data); setLoading(false); }; } catch (err) { console.log(err) }; } }; return (

      } fallback={userAvatar} />
      ); }; export default UploadAvatar;

      然后在其他組件中這樣使用(已省略非關鍵代碼):

      // src/pages/Demo/index.jsx import { useState } from 'react'; import UploadAvatar from '@/components/UploadAvatar';// 上傳頭像組件 // ... const Demo = () => { // ... const [avatar, setAvatar] = useState(userInfo?.avatar); return ( <> {/* 省略其他代碼 */} {/* 使用上傳頭像組件 */} ); }; export default Demo;

      我們來看一下效果:

      效果還不錯,功能已實現。上傳后圖片的地址會返回給父組件,最后只需在父組件的 確定 按鈕處提交表單即可完成更新用戶信息操作。

      React web前端

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:K8s集群證書的常見使用場景實踐
      下一篇:華為云中國行2018 ? 愛上西安
      相關文章
      亚洲M码 欧洲S码SSS222| 亚洲女人影院想要爱| 亚洲综合色婷婷在线观看| 亚洲网站视频在线观看| 亚洲AV成人片色在线观看高潮 | 亚洲AV网站在线观看| 亚洲人成未满十八禁网站| 国产精品亚洲精品观看不卡| 亚洲国产电影在线观看| 亚洲国产成人九九综合| 亚洲乱码卡一卡二卡三| 亚洲午夜电影在线观看| 亚洲午夜一区二区电影院| 亚洲乱码中文字幕小综合| 中文字幕亚洲综合久久综合| 久久夜色精品国产噜噜亚洲a| 亚洲综合精品伊人久久| 亚洲精品日韩一区二区小说| 亚洲av无码一区二区三区人妖| 亚洲AV无码AV吞精久久| 国产成人亚洲综合在线| 亚洲人午夜射精精品日韩| 亚洲五月午夜免费在线视频| 久久亚洲精品无码观看不卡| 亚洲精品二区国产综合野狼| 久久综合九九亚洲一区| 久久精品九九亚洲精品| 亚洲制服丝袜精品久久| 亚洲AV综合色区无码二区偷拍| 国产AV旡码专区亚洲AV苍井空| 亚洲高清国产拍精品熟女| 久久亚洲精品无码网站| 国产成人亚洲精品影院| 久久久亚洲精品蜜桃臀| 亚洲成av人片天堂网| 亚洲女人初试黑人巨高清| 亚洲高清一区二区三区| jizzjizz亚洲日本少妇| 亚洲午夜激情视频| 国产亚洲?V无码?V男人的天堂| 亚洲最大AV网站在线观看|