React组件类型

5 阅读2分钟

React组件类型

总结

类型含义说明示例
React.ReactNode表示 React 中可以渲染的所有内容类型,包括数字、字符串、JSX 元素、数组、Fragment、null 等。是一个宽泛的类型,涵盖了所有可能作为组件的子节点的类型。包括:stringnumberbooleannullundefinedJSX.ElementReact.ComponentReact.Fragment 等。jsx <div>{123}</div> <div>{['A', 'B', 'C']}</div> <div><span>Content</span></div> <div>{null}</div>
JSX.Element表示一个 JSX 元素,通常由 JSX 语法创建的 React 元素,它是 React 元素的具体类型。ReactElement 的具体类型,通常表示通过 JSX 创建的元素。与 React.ReactNode 的范围不同,它主要关注 JSX 元素。jsx <div>Hello</div> <button>Click me</button>
React.Component (类组件)表示一个基于类的 React 组件,它是 React 组件的一个构造函数或类实例。类组件有生命周期方法,可以通过 stateprops 管理数据。是一个基类,用于创建 React 类组件。类组件的 render 方法必须返回 JSX。jsx class MyComponent extends React.Component { render() { return <div>Hello</div>; }}
React.FC / React.FunctionComponent (函数组件)表示一个函数组件类型,它是函数式的组件,通常是一个纯函数,接受 props 作为参数并返回 JSX。React 推荐使用函数组件。是一个简写形式,表示一个返回 JSX 元素的函数,接收 props 作为参数。可以用 React.FC<Props> 来定义。通常不需要使用 children 的默认类型。jsx const MyComponent: React.FC<{ title: string }> = ({ title }) => <h1>{title}</h1>;
ReactElement表示一个具体的 React 元素实例,通常由 React.createElement 创建,包含类型、props 和 children。更具体地表示一个 React 元素对象,是 JSX.Element 的泛化。jsx React.createElement('div', { className: 'myClass' }, 'Hello')
ReactNode (组件返回值类型)表示一个组件的返回值类型,可以是任何可以渲染的内容,包括 JSX、字符串、数字、数组等。常用于组件的返回类型。通常表示组件返回的类型,可以是 React.ReactNode,但是侧重于渲染内容。jsx const MyComponent = () => <div>Content</div>;
ReactChild表示一个子元素,可以是单个元素或数组。它通常指一个 React 元素的子节点。包括 ReactElementstringnumberReactFragment 等类型。jsx <div><span>Hello</span></div> <div>{123}</div>
JSX.IntrinsicElements表示原生 HTML 元素在 JSX 中的类型,如 div, span, button 等。这些类型定义了原生 HTML 元素如何在 JSX 中表现,通常与元素的 props 一起定义。jsx <div>Content</div> <button>Click</button>

ReactElement、ReactNode、JSX.Element的区别(易混)

类型含义范围示例代码
ReactElement表示一个具体的 React 元素实例。通常是通过 React.createElement 或 JSX 创建的元素。仅仅表示通过 React.createElement 或 JSX 创建的单个元素。<div>Hello</div>React.createElement('div', {}, 'Hello')
JSX.Element表示通过 JSX 语法创建的 React 元素。ReactElement 的具体表现,表示通过 JSX 语法创建的元素。<div>Hello</div>
ReactNode表示 React 可以渲染的所有内容类型,包括字符串、数字、JSX 元素、数组、null 等。是最广泛的类型,表示任何可以渲染的内容。string, number, JSX.Element, ReactElement, null