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

React中<Comp/>与Comp的区别及TypeScript类型解析

一、<Comp/> 和直接引用 Comp 的区别
  • 本质差异
    • Comp 是你定义的组件本身,属于函数(函数组件)或类(类组件),作用是接收 props 参数,返回对应的React元素。
    • <Comp/> 是调用组件后生成的React元素对象,等同于执行 React.createElement(Comp, null) 的结果,是已生成的虚拟DOM节点,包含组件渲染后的结构信息。
  • 使用方式差异
    • 当你把 Comp 赋值给 data.icon 时,后续可在其他组件中像普通组件一样渲染它,还能传递额外props:
      // 可以给组件传新的props
      <data.icon width={24} height={24} />
      
    • 当你把 <Comp/> 赋值给 data2.icon 时,这个元素的props已固定(未传props则用默认值),后续只能直接插入JSX,无法再传递新props:
      // 只能直接渲染,不能传新props
      {data2.icon}
      
二、关于 ElementType 的含义

ElementType 是React官方TypeScript类型定义提供的内置类型,核心作用是兼容所有可作为React组件使用的类型,具体包含:

  • 自定义函数组件(比如你的Comp)
  • 自定义类组件
  • 原生HTML标签名(比如'div'、'svg'这类字符串)
  • 经过forwardRef、memo包装后的组件

你用ElementType能正常工作,是因为如果icon字段存储的是组件本身(比如data.icon = Comp的情况),ElementType刚好覆盖这类组件的类型。但如果icon字段需要同时支持存储组件本身和渲染后的React元素(比如data2.icon = <Comp/>),正确的类型应该是:

export type Test = {
  title: string;
  icon: ElementType | React.ReactElement;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 20:43:16