【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…

语气确定词库再nlp领域怎么应用?

语气确定词库在NLP领域的应用探索 在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;语气确定词库是一项至关重要的资源。它对于理解和分析文本中的情感、态度以及语义倾向具有极其重要的意义。在日常的微服务、RPC等技能实践中&#xff0c;也深感NLP技术对于提升系…

C++友元friend

简介&#xff1a;C友元的作用是让外部的对象&#xff08;全局函数、类、类成员函数&#xff09;能够访问到某个类里面的private修饰的数据&#xff0c;因此&#xff0c;必然是使用方法或者函数来操作数据。 1、全局函数做友元 使用全局函数做友元&#xff0c;函数接收一个对象&…

【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文件处理是一项常见的…

MySQL随便聊----之SQL的简单了解

一、含义 结构化查询语言&#xff0c;针对所有关系型数据库进行操作的语法 每一种数据库操作语法都存在不同的地方,操作相同的其实就是SQL语法,不同语法称之为该数据库操作软件的"方言" 二、通用语法 1. SQL 语句可以单行或多行书写&#xff0c;以分号结尾。 2. 可使…

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;最慢的步伐不是跬步&…

管理系统图片登录访问

图片就是url&#xff0c;但是有些管理系统的图片或者文件比较机密&#xff0c;需要登录之后才能访问&#xff0c;&#xff0c;就需要前端进行发送图片请求的时候携带上认证token&#xff0c;&#xff0c; 返回图片的二进制&#xff0c;然后再渲染到页面。。 FileReader使用 ax…

Vue 3与TypeScript的深度整合

Vue 3与TypeScript的深度整合是Vue团队在Vue 3中为TypeScript提供更好支持和更好的整合的结果。在Vue 3中&#xff0c;TypeScript被视为官方支持的语言&#xff0c;并且通过一系列的改进和新增功能来提供与TypeScript的深度整合。 首先&#xff0c;Vue 3引入了支持TypeScript的…

网络安全思考题

1.windows登录的明文密码&#xff0c;存储过程是怎么样的&#xff0c;密文存在哪个文件下&#xff0c;该文件是否可以打开&#xff0c;并且查看到密文&#xff1f; 存储Windows登录的密码通常是加密存储的&#xff0c;而不是以明文形式存储。Windows使用的是NTLM或者Kerberos等…

leetcode热题HOT 32. 最长有效括号

一、问题描述&#xff1a; 给你一个只包含 ‘(’ 和 ‘)’ 的字符串&#xff0c;找出最长有效&#xff08;格式正确且连续&#xff09;括号子串的长度。 示例 1&#xff1a; 输入&#xff1a;s “(()” 输出&#xff1a;2 解释&#xff1a;最长有效括号子串是 “()” 示例 2&a…

【智能算法】囊状虫群算法(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二、解决办法…

TiDB系列之:TiCDC使用Changefeed完成数据同步任务

TiDB系列之:TiCDC使用Changefeed完成数据同步任务 一、Changefeed二、Changefeed 状态流转三、操作Changefeed四、cdc cli管理同步任务1.创建同步任务2.查询同步任务列表3.查询特定同步任务4.停止同步任务5.恢复同步任务6.删除同步任务7.更新同步任务配置8.管理同步子任务处理…