组件的渲染方法是否应该具有返回类型 React.ReactNode 或 JSX.Element?

IT技术 reactjs typescript
2021-05-03 08:51:52

两者似乎都不会导致编译错误,但是有什么区别,一个比另一个更可取吗?

2个回答

react-typescript-cheatsheet repo issue #57 中提出了这个确切的问题

引用原来的答案

不管组件最终呈现什么,React.createElement总是返回一个对象,它是JSX.Element接口,但是React.ReactNode是组件所有可能的返回值的集合。

  • JSX.Element -> 返回值 React.createElement
  • React.ReactNode -> 组件的返回值

一般来说,我认为这个想法是JSX.Element专门描述的接口React.createElement并且范围很窄,而React.ReactNode更广泛并且涵盖了组件可以返回的所有可能的值。

这取决于。ReactJS 原则上可以 渲染

type RenderType = JSX.Element* | Array<RenderType> | string | number | boolean | null
// * includes Portal, Fragment
// for both function and class components
// (type doesn't exist in React type declarations)

TS 渲染类型目前仅限

  • 类组件:(ReactNode比 React 允许的更宽)

  • 函数组件:(JSX.Element | null比 React 更严格)

JSX.Element或多或少与 相同ReactElement,您可以互换使用两者。