在TypeScript中描述react组件类型的正确方法是什么?假设我们有一个返回react组件的函数。该函数:
const getTabContent: () => ReactElement = () => {
switch (tab) {
case 1:
return <Images images={images} onSelect={onSelect}/>;
default:
return <Search onSelect={onSelect}/>;
}
};
这里我把返回的类型描述为ReactElement,但是我想知道它是否正确,或者我应该把它描述为ReactComponentElement,或者甚至完全不同?另外,这两个类型都是泛型,如果其中一个是正确的,如何完整地描述它们?
UPD ReactElement似乎适合这里,因为,例如,FC(FunctionComponent)返回它
7条答案
按热度按时间xzabzqsa1#
功能组件的正确类型是
React.FunctionComponent
或React.FC
,后者是功能组件的快捷别名FC
类型只是将children
属性添加到功能组件的props
参数中,以便您可以访问它:FC
是一个泛型类型,因此您可以向组件"添加" prop :从React18开始,
FC
就不再隐式添加children
属性,而是提供了一种显式的方法来使用PropsWithChildren
generix类型添加属性示例:
儿童使用:
这允许有一个
children
prop 有点严格。jm2pwxwz2#
如果你想把函数组件和类组件一起使用,那么就使用
React.ComponentType
dpiehjr43#
考虑React中的内置定义:
我使用的是
React.ReactNode
,它被定义为sq1bmfud4#
TypeScript提供了强大的类型推理。在大多数情况下都可以使用它。只有顶级组件需要细粒度接口。
例如,这里的结果类型将被计算为JSX.Element
0ejtzxu15#
最好的选择是
ComponentType
。如果你对函数组件要求严格,你可以使用FC
。在某些情况下,你可能需要类组件类型和函数组件类型的支持。(例如,定义一个prop类型,prop需要一个组件,函数组件或类组件)。推荐的方法是在类型定义中使用
ComponentType
(即ProopTypes),当您要定义返回类型等时使用FC
。仅供参考,以下是 typescript 中
ComponentType
、FC
的定义hpxqektj6#
使用类型定义组件并在其他位置使用它的简单示例:
第1步:像这样定义组件:
步骤2:定义接口以描述功能组件类型:
步骤3:轻松使用界面:
5f0d552i7#
React.ReactNode
是定义React元素类型的正确方法。