当前位置: 首页 > news >正文

react + antDesign封装图片预览组件(支持多张图片)

需求场景:最近在开发后台系统时经常遇到图片预览问题,如果一个一个的引用antDesign的图片预览组件就有点繁琐了,于是在antDesign图片预览组件的基础上二次封装了一下,避免重复无用代码的出现

效果

公共预览组件代码

import React, { useImperativeHandle, forwardRef, useState } from 'react';
import { message, Image } from 'antd';const ChildComponent = forwardRef((props, ref) => {
const [visible, setVisible] = useState(false);
const [imgList, setImgList] = useState([]);const showModal = async (list) => {setImgList(list);if (list.length === 0) {message.warning('暂无图片');} else {setVisible(true);}
};useImperativeHandle(ref, () => ({showModal
}));return (<div><div style={{ display: 'none' }}><Image.PreviewGroup preview={{ visible, onVisibleChange: (vis) => setVisible(vis) }}>{imgList.map((item) => {return <Image src={item.url} />;})}</Image.PreviewGroup></div></div>);
});export default ChildComponent;

使用方法

  1. 在项目components文件夹下新建preview文件夹
  2. preview文件夹下新建imgs.jsx把以上代码复制粘贴进去
  3. 在需要用到的地方引入
    import React, { useRef,useState } from 'react';
    import { Button } from 'antd';
    import Imgs from '../../.././components/Preview/imgs';export default () => {
    const imgsRef = useRef();
    const [imgList, setImgList] = useState([{name:'图片1',url:'https://gw.alipayobjects.com/zos/antfincdn/LlvErxo8H9/photo-1503185912284-5271ff81b9a8.webp'},{name:'图片2',url:'https://gw.alipayobjects.com/zos/antfincdn/cV16ZqzMjW/photo-1473091540282-9b846e7965e3.webp'},{name:'图片3',url:'https://gw.alipayobjects.com/zos/antfincdn/x43I27A55%26/photo-1438109491414-7198515b166b.webp'}
    ]);//预览图片
    const imgsPreview = (text) => {imgsRef.current.showModal(imgList);
    };return (<div><Button onClick={()=>{imgsPreview()}}></Button><Imgs ref={imgsRef} /></div>);
    };

注:本人前端小白 ,如有不对的地方还请多多指教

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 全面掌握大模型:从零基础到精通的终极指南,超详细教程手把手教会你,收藏我这一篇就够了
  • Java笔试面试题AI答之设计模式(5)
  • python gensim实现作者主题模型(Author-Topic Model)
  • 车路云一体化大模型数据治理方案
  • 什么是RTOS操作系统
  • 内核驱动开发之系统移植
  • mysql update语句的执行流程
  • PDB数据库中蛋白质结构文件数据格式
  • Python 类class的用法详解
  • 《重生之我在java世界做任务升级》--第一章
  • 免费的跨平台剪贴板工具,超好用!
  • 【计算机网络】计算机网络基础二
  • Java Web服务运行一段时间后出现cpu升高导致的性能下降问题排查
  • C++ std::find函数 容器元素查找
  • PHP智慧教育新篇章优校管理系统小程序源码
  • python3.6+scrapy+mysql 爬虫实战
  • 30秒的PHP代码片段(1)数组 - Array
  • CentOS6 编译安装 redis-3.2.3
  • const let
  • Flannel解读
  • HTTP中GET与POST的区别 99%的错误认识
  • JavaScript设计模式系列一:工厂模式
  • Laravel Mix运行时关于es2015报错解决方案
  • Lsb图片隐写
  • nginx 负载服务器优化
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • Rancher-k8s加速安装文档
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • SpringBoot 实战 (三) | 配置文件详解
  • 从零开始在ubuntu上搭建node开发环境
  • 读懂package.json -- 依赖管理
  • 你不可错过的前端面试题(一)
  • 漂亮刷新控件-iOS
  • 如何在GitHub上创建个人博客
  • 微服务框架lagom
  • 温故知新之javascript面向对象
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • # Redis 入门到精通(八)-- 服务器配置-redis.conf配置与高级数据类型
  • #etcd#安装时出错
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (k8s)kubernetes集群基于Containerd部署
  • (leetcode学习)236. 二叉树的最近公共祖先
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (PySpark)RDD实验实战——取一个数组的中间值
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (四)Controller接口控制器详解(三)
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (正则)提取页面里的img标签
  • (转)mysql使用Navicat 导出和导入数据库
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能