【Ant-Desgin 头像上传框】限制数量为1张图片,base64,其他需求可以改我组件中的代码

Ant-Desgin 头像上传框

  • 样式图
  • 参数
  • 主要代码
    • UpLoad 组件
    • 父组件

样式图

在这里插入图片描述
在这里插入图片描述

图片数量限制为1,当选择了图片后,需要切换图像时需点击头像完成切换

参数

/*** @description: 图片上传组件* @param {*} action: 上传地址* @param {*} width: 宽度* @param {*} height: 高度* @param {*} onFileListChange: 文件列表改变的回调函数* @return {*}*/
<FileUpload action={"/upload"} width={100} height={100} onFileListChange={handleFileListChange} />

主要代码

UpLoad 组件

/* eslint-disable react-hooks/exhaustive-deps */
/* eslint-disable no-unused-vars */
import React, { useEffect, useState, useRef } from 'react'
import { Upload, message } from 'antd'
import PropTypes from 'prop-types'
import ImgCrop from 'antd-img-crop'const FileUpload = ({ action, width = 100, height = 100, onFileListChange }) => {const [fileList, setFileList] = useState([])const [imgUrl, setImgUrl] = useState('')const uploadRef = useRef(null)const imgStyle = {width: `${width}px`,height: `${height}px`,objectFit: 'cover',borderRadius: '50%',cursor: 'pointer'}useEffect(() => {}, [])FileUpload.propTypes = {action: PropTypes.string.isRequired,width: PropTypes.number,height: PropTypes.number,onFileListChange: PropTypes.func}const onChange = async ({ fileList: newFileList }) => {const src = await new Promise(resolve => {const reader = new FileReader()reader.readAsDataURL(newFileList[0].originFileObj)reader.onload = () => resolve(reader.result)})setImgUrl(src)setFileList(newFileList)// 调用父组件传递的回调函数onFileListChange(newFileList)}const onPreview = async file => {const src = await new Promise(resolve => {const reader = new FileReader()reader.readAsDataURL(file.originFileObj)reader.onload = () => resolve(reader.result)})const image = new Image()image.src = srcconst imgWindow = window.open(src)imgWindow?.document.write(image.outerHTML)}const beforeUpload = async file => {console.log('beforeUpload')const isLt12M = file.size / 1024 / 1024 < 12const isImage = file.type.startsWith('image/')if (!isLt12M) {message.error('图片不得大于12MB!')}if (!isImage) {message.error('只允许上传图片!')}return isLt12M && isImage}const handleImageClick = () => {const uploadInput = document.querySelector('.ant-upload input[type="file"]')if (uploadInput) {uploadInput.click()}}return (<><ImgCrop><Uploadaction={action}ref={uploadRef}listType="picture-circle"fileList={fileList}onChange={onChange}onPreview={onPreview}beforeUpload={beforeUpload}showUploadList={false}maxCount={1}>{fileList.length < 1 && '+ Upload'}</Upload></ImgCrop>{fileList.length > 0 && (<div><img src={imgUrl} alt="avatar" style={imgStyle} onClick={handleImageClick} /></div>)}</>)
}export default FileUpload

父组件

/* eslint-disable no-unused-vars */
import React, { useEffect, useState } from 'react'
import FileUpload from '.'const Demo = () => {const [parentFileList, setParentFileList] = useState([])const handleFileListChange = (newFileList) => {// 更新父组件的文件列表setParentFileList(newFileList)}useEffect(() => {console.log(parentFileList, 666);}, [parentFileList, setParentFileList])return (<div><FileUpload action={"/upload"} width={100} height={100} onFileListChange={handleFileListChange} /></div>)
}export default Demo

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/3926.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三级等保建设及测评技术方案书(Word原件2024)

1信息系统详细设计方案 1.1安全建设需求分析 1.1.1网络结构安全 1.1.2边界安全风险与需求分析 1.1.3运维风险需求分析 1.1.4关键服务器管理风险分析 1.1.5关键服务器用户操作管理风险分析 1.1.6数据库敏感数据运维风险分析 1.1.7“人机”运维操作行为风险综合分析 1.2…

【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(四)

课程地址&#xff1a; 黑马程序员HarmonyOS4NEXT星河版入门到企业级实战教程&#xff0c;一套精通鸿蒙应用开发 &#xff08;本篇笔记对应课程第 7 - 9节&#xff09; P7《06.ArkUI组件-Text》 本节我们继续学习 Text 文本组件&#xff1a; reaources目录下有3个主要的目录&…

Java使用SpringBoot和EasyExcel 实现动态数据导出实战

Java使用SpringBoot和EasyExcel 实现动态数据导出实战 1、前言2、【资源地址】3、代码示例(demo)4、目前Java实现数据导出为Excel方式5、依赖6、总结 1、前言 工作中有用到将数据导出为Excel的场景&#xff0c;在此记录下。在日常开发中&#xff0c;Excel文件处理是一项常见的…

JSON六种值类型的写法

JSON&#xff08;JavaScript Object Notation&#xff09;是一种人类可读的文本数据格式。它源于JavaScript&#xff0c;标准开放&#xff0c;格式要求更为严格&#xff0c;独立于具体编程语言&#xff0c;常用于数据交换。 列举一段JSON数据&#xff0c;解释JSON六种值类型的…

C基础语法速览

叠甲&#xff1a;以下文章主要是依靠我的实际编码学习中总结出来的经验之谈&#xff0c;求逻辑自洽&#xff0c;不能百分百保证正确&#xff0c;有错误、未定义、不合适的内容请尽情指出&#xff01; 文章目录 1.数据类型1.1.数据类型的常见分类1.2.数据类型的符号修饰1.3.数据…

店匠科技技术产品闪耀,引领新质生产力发展

在科技飞速发展的今天,新质生产力正成为推动社会进步和经济高质量发展的核心力量。店匠科技,作为一家致力于为全球B2C电商提供产品和技术解决方案的领先企业,其技术产品不仅体现了新质生产力的创新特质,更在推动电商行业转型升级中发挥了重要作用。 新质生产力,以创新为主导,摆…

单片机为什么有多组VDD?

以前我在画尺寸小的PCB时&#xff0c;比较头痛&#xff0c;特别是芯片引脚又多的&#xff0c;芯片底下&#xff0c;又不能打太多过孔。 可能有些老铁也比较好奇&#xff0c;为什么一个单片机芯片&#xff0c;有这么多组VDD和VSS。 比如下面这个100个引脚的STM32单片机。 有5组…

Postman 在 Linux 上的安装指南:简单快速开始使用

本文将介绍如何在 Linux 上安装 Postman 的详细步骤&#xff0c;Postman 支持的 Linux 的发行版包括&#xff1a;Ubuntu 14.04 及更高版本&#xff0c;Fedora 24&#xff0c;Debian 8 及更高版本。下面将介绍其具体的安装方法。 手动安装 Postman 的下载地址&#xff0c;下载…

JavaScript算法描述【排序与搜索】六大经典排序|合并两个有序数组|第一个错误的版本

&#x1f427;主页详情&#xff1a;Choice~的个人主页 &#x1f4e2;作者简介&#xff1a;&#x1f3c5;物联网领域创作者&#x1f3c5; and &#x1f3c5;阿里专家博主&#x1f3c5; and &#x1f3c5;华为云享专家&#x1f3c5; ✍️人生格言&#xff1a;最慢的步伐不是跬步&…

【智能算法】囊状虫群算法(TSA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2020年&#xff0c;S Kaur等人受到囊状虫群自然行为启发&#xff0c;提出了囊状虫群算法&#xff08;Tunicate Swarm Algorithm, TSA&#xff09;。 2.算法原理 2.1算法思想 TSA模拟了囊状虫群在导…

VTK----VTK数据结构详解3(代码篇)

上篇文章&#xff08;VTK----VTK数据结构详解&#xff08;计算机篇&#xff09;-CSDN博客&#xff09;从计算机数据结构&#xff08;数组、链表等&#xff09;的角度对数据数组、数据对象、数据属性的实现原理进行了说明&#xff0c;下面从代码的层面详细说明它们的使用及相关实…

nginx 交叉编译,启动报错nginx: [emerg] getgrnam(“nogroup“) failed 的原因和解决办法

目录 一、错误提示 nginx: [emerg] getgrnam("nogroup") failed二、解决办法三、测试 一、错误提示 nginx: [emerg] getgrnam(“nogroup”) failed nginx 交叉编译&#xff0c;在开发板上启动报错 nginx: [emerg] getgrnam("nogroup") failed二、解决办法…

笔记本硬盘坏了怎么把数据弄出来 笔记本硬盘数据恢复一般需要多少钱

现在办公基本都离不开笔记本电脑&#xff0c;就连学生写作业也大多是都在电脑上完成。硬盘作为电脑存储的重要组成部分&#xff0c;承载着存储文件和各类软件的重任。如果硬盘出现故障&#xff0c;基本上这台电脑就无法正常工作&#xff0c;同时我们可能面临丢失很多重要的数据…

电气设备绝缘的高电压试验(二)——高电压的测量

本篇为本科课程《高电压工程基础》的笔记。 本篇为这一单元的第二篇笔记。上一篇传送门。 稳态高电压的测量 稳态高电压主要指的是工频交流高压和直流高压。高压测量系统常常含有转换装置、转换装置到试验品之间的引线、接地连线、低压测量回路和测量仪表等。 实验室测量方…

【python】语言学习笔记--用来记录总结

请问以下变量哪些是tuple类型&#xff1a; a ()b (1)c [2]d (3,)e (4,5,6)answer在Python中&#xff0c;元组&#xff08;tuple&#xff09;是由逗号分隔的一组值组成的有序序列&#xff0c;通常用圆括号括起来。让我们逐个检查变量&#xff0c;看哪些是元组类型&#xff…

【UE5.1 C++】提升编译速度

步骤 1. 在“C:\Users\用户\AppData\Roaming\Unreal Engine\UnrealBuildTool”目录下找到“BuildConfiguration.xml”文件 打开“BuildConfiguration.xml”&#xff0c;添加如下部分内容 <?xml version"1.0" encoding"utf-8" ?> <Configuratio…

JavaSE字节缓冲流

欢迎来到 请回答1024 的博客 &#x1f353;&#x1f353;&#x1f353;欢迎来到 请回答1024的博客 关于博主&#xff1a; 我是 请回答1024&#xff0c;一个追求数学与计算的边界、时间与空间的平衡&#xff0c;0与1的延伸的后端开发者。 博客特色&#xff1a; 在我的博客中&a…

中移在线ChinaMobile系统单机和分布式应用的登录校验解决方案

单机的Tomcat应用登录校验&#xff1a; 用户首次登录成功后&#xff0c;服务端会创建一个Session会话&#xff0c;客户端会生成一个sessionid&#xff0c;客户端会把sessionid保存到cookie里&#xff0c;每次请求都携带这个sessionid&#xff0c;服务端通过校验来判断是拦截还是…

Vuforia AR篇(四)— AR虚拟按钮

目录 前言一、创建虚拟按钮二、创建脚本三、效果 前言 在当今互联网和移动设备普及的背景下&#xff0c;**增强现实&#xff08;AR&#xff09;**技术正迅速成为连接现实世界与数字信息的重要桥梁。AR虚拟按钮作为这一技术的创新应用&#xff0c;不仅提供了一种全新的用户交互…

mac上安装Tomcat

1. 简介 Tomcat 是一个开源的 Java 服务器&#xff0c;它实现了 Java Servlet、JavaServer Pages&#xff08;JSP&#xff09;和Java WebSocket 技术。Tomcat 是 Apache 软件基金会的一个项目&#xff0c;是一个轻量级、高性能的 Web 容器。作为一个 Web 服务器&#xff0c;To…