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
相关产品推荐
相关产品推荐

