请教一下 react 的 tsx 怎么写类型定义?

2020-11-29 15:31:04 +08:00
 chenliangngng
React.FC,React.Element,React.Node 的本质区别是什么呢?
我一般用 React.Element,但是看其他人(团队其他所有人)都是用的 FC 和 Node
3246 次点击
所在节点    React
8 条回复
joesonw
2020-11-29 16:16:05 +08:00
React.ReactNode 含 React.ReactElement
yuang
2020-11-29 16:47:58 +08:00
JSX.Element
yuang
2020-11-29 16:49:47 +08:00
tikazyq
2020-11-29 17:38:00 +08:00
React.FC = Functional Component 函数组件
React.ReactElement = Native DOM Element / User Defined Component 原生 DOM 元素 / 用户自定义元素
React.ReactNode = Any possible type of React node 所有可能的 React 节点 = 原生 JS 类型 + 原生 DOM 元素 + 用户自定义元素

简单来说,不知道用什么组件类型时,就用 React.FC
chenliangngng
2020-11-29 22:49:17 +08:00
@yuang 3#
@tikazyq 4#
那使用 React.element 没有任何问题对吧?
请问又为什么要用 fc 呢?仅仅是为了区别 React.Component 吗
geekrainy
2020-11-30 00:12:54 +08:00
React.FC 包含了 PropsWithChildren 的泛型,不用显式的声明 props.children 的类型,ReactNode 和 ReactElement 一般用在通过其他 props 传递组件的情形,手动声明。
weixiangzhe
2020-11-30 09:13:39 +08:00
funnyecho
2020-11-30 10:16:46 +08:00
可以参考 @types 中的定义: https://github.com/DefinitelyTyped/DefinitelyTyped/blob/4a1e6b12938de49594f8eba59ad1b1f19d6478c4/types/react/index.d.ts#L237

React.Element 可以看作是 React 组件的基类型。

我自己实际使用中,很少会用 React.Element 。

如果定义 functional component,就用 React.FC<T>。

React.Node 用于外部组件的输入(比如 props ),因为 React.Node 个人感觉类似与 any 的组件类型,它几乎包含了 React 所支持的所有组件类型:
type ReactNode = ReactElement | ReactNodeArray | string | text | boolean | null | undefined;

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/730318

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX