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

React智能Tooltip封装术:精准检测文本溢出,告别无效提示!

1.封装公共组件

import React, { useRef, useState, useEffect } from 'react';
import { Tooltip } from 'antd';/*** 智能 Tooltip 组件 - 仅在文本溢出时显示提示* * @param children 需要包装的内容* @param title Tooltip 显示的提示内容(如果不提供则默认为文本内容)* @param className 自定义类名* @param style 自定义样式* @param tooltipProps 其他传递给 Antd Tooltip 的属性*/
const SmartTooltip = ({ children, title, className = '', style = {}, ...tooltipProps 
}) => {const containerRef = useRef(null);const [isOverflowing, setIsOverflowing] = useState(false);const [content, setContent] = useState(children);// 检查元素是否溢出const checkOverflow = () => {if (!containerRef.current) return false;const container = containerRef.current;return container.scrollWidth > container.clientWidth;};useEffect(() => {const container = containerRef.current;// 初始化检查setIsOverflowing(checkOverflow());// 添加窗口大小变化的监听器const handleResize = () => {setIsOverflowing(checkOverflow());};window.addEventListener('resize', handleResize);const resizeObserver = new ResizeObserver(handleResize);if (container) {resizeObserver.observe(container);}// 清理函数return () => {window.removeEventListener('resize', handleResize);if (container) {resizeObserver.unobserve(container);}resizeObserver.disconnect();};}, [content]);// 监听内容变化useEffect(() => {setContent(children);}, [children]);// 计算实际显示的 Tooltip 内容const tooltipContent = title || content;return (<Tooltip title={isOverflowing ? tooltipContent : null} mouseEnterDelay={0.2}placement="topLeft"{...tooltipProps}><divref={containerRef}className={`truncate ${className}`}style={{...style}}>{content}</div></Tooltip>);
};export default SmartTooltip;

2.实际使用

import React from 'react';
import SmartTooltip from './SmartTooltip';const DemoComponent = ({ item }) => (<div className="mt-[10px]"><SmartTooltip className="txt1 w-[100px]">{item?.roadShowTitle ? item?.roadShowTitle : '----'}</SmartTooltip></div>
);export default DemoComponent;
http://www.dtcms.com/a/286439.html

相关文章:

  • Linux下使用原始socket收发数据包
  • 4644电源管理芯片在微波射频组件中的技术优势与国产化实践
  • 《5分钟开发订单微服务!飞算JavaAI实战:IDEA插件安装→空指针修复→K8s部署全流程》
  • 高并发、高性能、高可用
  • LeetCode热题100【第4天】
  • openinstall九周年:聚焦安全防御,护航业务持续增长
  • 40+个常用的Linux指令——上
  • 【ACL系列论文写作指北19-科研中角色定位与自我认知】-如何在一篇论文中摆正自己的位置
  • 由于热爱,我选PGCE专家学习
  • 自动化测试面试中常见的问题
  • 从碎片设备到全球算力:Sollong引领AI时代的基础资源革命
  • Mysql定位慢查询
  • 内存泄漏系列专题分析之二十九:高通相机CamX--Android通用GPU内存分配和释放原理
  • 主流编程语言全景图:从Python到Rust的深度解析
  • 优先算法——专题九:链表
  • vc配置使用预编译
  • Android性能优化
  • 搜广推校招面经九十五
  • 【PTA数据结构 | C语言版】根据后序和中序遍历输出前序遍历
  • 更适合后端宝宝的前端三件套之CSS
  • 域名备案的注册地址怎么更改
  • 基于pandas,按日期时间排序,计算每个连续段的开始时间、结束时间,以及时长
  • Selenium自动化浏览器操作指南
  • Deep Multi-scale Convolutional Neural Network for Dynamic Scene Deblurring 论文阅读
  • DTW算法解决时序问题的解析实践
  • 【C++】std::exchange 原子性 返回值优化RVO
  • js基本数据类型之字符串类型
  • Python 数据分析与可视化:从基础到进阶的技术实现与优化策略
  • svn如何设置忽略文件夹或者文件的提交
  • PyQt5信号与槽(信号与槽的高级玩法)