React组件中的render方法确实返回JSX。从React基础组件类中,我可以看出该方法返回一个ReactNode,其定义如下:
type ReactNode = ReactChild | ReactFragment | ReactPortal | boolean | null | undefined;
所以我的组件看起来像这样:
import React, { Component, ReactNode } from 'react'
class Foo extends Component<{}, {}> {
render(): ReactNode {
return <h1>bar</h1>
}
}
无状态功能组件也会返回JSX,所以我假设它也返回了ReactNode。
import React, { ReactNode } from 'react'
const Foo = (): ReactNode => <h1>bar</h1>
但是,如果我这样做并包含此sf组件,则会收到错误消息:
TS2605: JSX element type 'ReactNode' is not a constructor function for JSX elements.
如果我使用ReactElement作为它的类型,它将起作用:
import React, { ReactElement } from 'react'
const Foo = (): ReactElement<{}> => <h1>bar</h1>
我不明白:JSX只是说React.createElement的一种方式。在render()和sf-components中,同一个函数如何有两种不同类型?