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

如何向React组件传递ref?遇类型错误求助

解决React自定义组件传递ref的TypeScript错误

问题原因

你的自定义Button组件未配置为接收ref属性,React函数组件默认不支持直接传递ref,需通过React.forwardRef显式启用该功能;同时TypeScript会严格校验属性类型,因此抛出「属性'ref'不存在于类型」的错误。

解决方案

1. 修改Button组件,用forwardRef包裹

将Button组件改写为React.forwardRef包裹的形式,让它能接收并转发ref到内部原生按钮元素:

import React from 'react';

// 定义Button的props类型,包含所有需要的属性
interface ButtonProps {
  disabled?: boolean;
  className?: string;
  onClick?: () => void;
  type?: 'button' | 'submit' | 'reset';
  style?: React.CSSProperties;
  'data-name'?: string;
  children?: React.ReactNode;
  // 其他你需要的属性
}

// forwardRef泛型第一个参数是ref的目标类型(原生button元素),第二个是props类型
const Button = React.forwardRef<HTMLButtonElement, ButtonProps>((props, ref) => {
  return (
    <button 
      ref={ref} 
      {...props}
    >
      {props.children}
    </button>
  );
});

export default Button;

2. 优化Select组件的ref类型

把Select组件中useRef的类型从any改为具体的HTMLButtonElement,提升类型安全性:

// 原代码
// const selectBtn = useRef<any>(null);
// 修改后
const selectBtn = useRef<HTMLButtonElement>(null);

原理说明

React.forwardRef会创建一个特殊组件,它能接收额外的ref参数,并将其传递给组件内部的DOM元素或其他组件。这样父组件(Select)给Button传递的ref会直接指向Button内部的原生<button>元素,你就能通过它获取元素的DOM属性(如offsetTop、offsetHeight)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 21:47:36