当前位置: 首页 > 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>);
    };

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

http://www.lryc.cn/news/444135.html

相关文章:

  • 逻辑回归 和 支持向量机(SVM)比较
  • GS-SLAM论文阅读笔记--TAMBRIDGE
  • [Redis面试高频] - zset的底层数据结构
  • 搜维尔科技:OptiTrack将捕捉到的人类动作数据映射到人形机器人的各个关节上进行遥操作
  • CentOS Linux教程(6)--CentOS目录
  • 观察者模式全攻略:从设计原理到 SpringBoot 实践案例
  • 【MyBatis】Java 数据持久层框架:认识 MyBatis
  • 【Delphi】通过 LiveBindings Designer 链接控件示例
  • 深度学习——基础知识
  • QT实现升级进度条页面
  • JavaWeb--纯小白笔记04:Tomcat整合IDEA
  • 【jvm】动态链接为什么需要常量池
  • HTTPS详解
  • redis作为mybaits(mybatisplus)的缓存
  • 【环境配置】AST: Asymmetric Student-Teacher Networks for Industrial Anomaly Detection
  • TinkerTool System for Mac实用软件系统维护工具
  • 物理学基础精解【9】
  • Flask-JWT-Extended登录验证
  • Altium Designer(AD)百度云下载与安装(附安装步骤)
  • 无人机视角下的车辆数据集
  • 【MYSQL】聚合查询、分组查询、联合查询
  • 使用IDA Pro动态调试Android APP
  • JS中的for...in和for...of有什么区别?
  • 【C++篇】引领C++模板初体验:泛型编程的力量与妙用
  • 在react中 使用redux
  • 计算机毕业设计python+spark知识图谱房价预测系统 房源推荐系统 房源数据分析 房源可视化 房源大数据大屏 大数据毕业设计 机器学习
  • Spring-bean的生命周期-终篇
  • Kotlin 枚举和 when 表达式(六)
  • 数字范围按位与
  • WebRTC编译后替换libwebrtc.aar时提示找不到libjingle_peerconnection_so.so库