You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js项目中NextUI Tooltip不渲染且出现Ref警告问题求助

NextUI Tooltip组件渲染异常及ref警告解决方法

问题原因

NextUI的Tooltip组件内部需要获取子元素的DOM ref来实现定位、触发显示等逻辑,但你传入的AiOutlineEdit是react-icons提供的函数组件,默认没有通过React.forwardRef()转发ref,导致Tooltip尝试给它绑定ref时失败,触发控制台警告,同时也会干扰Tooltip的正常功能,导致showArrow、placement等props不生效。

解决方案

方案1:用原生DOM元素包裹图标

把图标放在<span>、<button>这类原生DOM元素里,原生元素可以直接接收ref,Tooltip就能正常工作:

import { Tooltip } from "@nextui-org/tooltip";
import { AiOutlineEdit } from "react-icons/ai";

export const SomeComponent = () => {
  const userCanEdit = true; // 假设这是你已定义的变量

  return (
    <Tooltip 
      showArrow={true} 
      placement="bottom" 
      content={`${userCanEdit ? 'Rename file' : 'Cannot Rename File'}`}
    >
      <span style={{ cursor: userCanEdit ? 'pointer' : 'not-allowed' }}>
        <AiOutlineEdit size={18} />
      </span>
    </Tooltip>
  );
}

方案2:用React.forwardRef包装图标组件

如果不想额外添加DOM元素,可以手动用React.forwardRef()包装图标组件,转发ref给内部的图标元素:

import { Tooltip } from "@nextui-org/tooltip";
import { AiOutlineEdit } from "react-icons/ai";
import React from "react";

// 包装图标组件,转发ref
const ForwardedEditIcon = React.forwardRef((props, ref) => {
  return <AiOutlineEdit ref={ref} {...props} />;
});

export const SomeComponent = () => {
  const userCanEdit = true;

  return (
    <Tooltip 
      showArrow={true} 
      placement="bottom" 
      content={`${userCanEdit ? 'Rename file' : 'Cannot Rename File'}`}
    >
      <ForwardedEditIcon size={18} />
    </Tooltip>
  );
}

内容的提问来源于stack exchange,提问作者cbutler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 07:52:05