1.封装公共组件
import React, { useRef, useState, useEffect } from 'react';
import { Tooltip } from 'antd';
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]);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;