ReactElement 是 React 用来描述 UI 界面元素的最基本的对象,是构建虚拟 DOM 的核心元素。

  • 定义 ReactElement 是不可变的对象,表示界面中的某个元素。它包含了用于渲染 UI 所需的信息,如元素的类型、属性(props)、以及子元素(children)。
  • 类型 :当我们使用 JSX 编写代码时(如 <div>Hello</div> <MyComponent /> ),React 会将其转化为 ReactElement 对象。这个对象由 React 内部处理,并最终映射到实际的 DOM 结构。

2. 什么是 children

children 是组件属性(props)中的一个特殊属性,用于传递嵌套的子组件或内容。

  • 定义 :在 React 组件中, children 表示组件内嵌的所有子元素。例如,在 <MyComponent><p>Hello</p></MyComponent> 中, <p>Hello</p> 就是传递给 MyComponent children
  • 类型 children 可以是单个元素,也可以是多个元素,甚至是任意类型的内容,如字符串、数字、 null undefined 。因此,在类型检查时,通常使用 ReactNode 来表示 children

3. 什么是 ReactNode

ReactNode 是 TypeScript 提供的一个类型,用于表示所有可以被渲染的内容类型。它是 React 中的一个非常灵活的类型。

  • 定义 ReactNode 是一个联合类型,涵盖了所有可以被渲染的内容。它包括:
    • ReactElement :通过 JSX 创建的元素。
    • 字符串或数字:可以直接显示的文本或数字。
    • 布尔值、 null undefined :不会被渲染,但合法存在。
    • 数组:可以包含多个 ReactNode ,用于渲染多个元素。

这种类型的设计使得 ReactNode 可以表示几乎所有的 UI 结构,因此在定义 children 或组件的返回值类型时, ReactNode 经常被使用。

4. 它们之间的区别

ReactElement ReactNode 的区别

  • ReactElement 是 React 用于描述界面元素的具体对象。
  • ReactNode 则是一个更广泛的类型,可以包含 ReactElement 以及其他可渲染的内容,如字符串、数字、数组等。
  • children ReactNode 的关系

    • children 是组件的一个属性,用于接收嵌套的子元素。
    • 由于 children 可以是多种类型的内容,通常为其定义的类型是 ReactNode ,这样可以接受多种形式的子内容。
  • 5. 示例分析

    为了更好地理解这些概念,让我们看几个示例:

    示例 1: ReactElement

    当我们使用 JSX 编写 React 组件时,它们会被转换为 ReactElement 对象。例如:

    const element: ReactElement = <h1>Hello, World!</h1>;

    这里的 element 是一个 ReactElement ,它描述了一个 h1 元素,包含了 "Hello, World!" 的文本内容。

    示例 2: children
    const MyComponent: React.FC = ({ children }) => { return <div>{children}</div>; // 使用 MyComponent <MyComponent> <p>This is a paragraph.</p> <span>And this is a span.</span> </MyComponent>

    在上面的代码中, <p> <span> 元素被作为 children 传递给 MyComponent children 可以包含多个元素,并且它们的类型为 ReactNode

    示例 3: ReactNode
    const content: ReactNode = "This is a string"; const numberContent: ReactNode = 42; const elementContent: ReactNode = <h1>Hello</h1>; const mixedContent: ReactNode = [<h1 key="1">Hello</h1>, <p key="2">World</p>];

    这些变量的类型都是 ReactNode ,表示它们都可以被 React 渲染。这展示了 ReactNode 的灵活性,可以表示多种不同的渲染内容。

    6. 什么时候使用哪种类型?

    • ReactElement :当你需要明确表示一个由 JSX 创建的元素时使用。通常不需要手动定义 ReactElement ,因为它是由 JSX 自动生成的。
    • ReactNode :用于表示可以被渲染的所有类型的内容,特别是在定义组件的 children 或返回值时。
    • children :作为组件的一个 props 属性,通常定义类型为 ReactNode ,以接受多种形式的嵌套内容。

    总结

    • ReactElement 是 React 用来描述 UI 元素的对象,是不可变的。
    • children 是一个特殊的属性,用于传递嵌套的内容到组件内部。
    • ReactNode 是一个通用的类型,可以包含所有可以被渲染的内容,包括 ReactElement 、字符串、数字、数组等。
    先判断config中内置props(key,ref,self,source)存在且有效,则赋值给新声明的变量 再将config中非内置的props 给新声明的props(key ref不会跟其他config 中的 变量一起被处理,而是单独作为变量出现在 ReactElement 上。) 判断如果孩子节点为一个 . . . react ts3 项目 你将会明白: react 元素的key ref为什么不会存在props上,并且传递,开发环境下与生产环境下处理key ref的区别? . . . │ ├── hasValidRef ----------------------------- 检测获取config上的ref . . .
    React Children 文章目录 React Children escapeescapeUserProvidedKeygetElementKeymapIntoArraymap Children children . map流程图实例(1)(2)(3)(4)(5)(a)总结 React Children 提供了许多处理props . children 的方法。本文将源码由上往下解析。 escape function escape(key: string): string { const escapeRegex = /[=
    ReactElement s 是构成 React App的最小单位。 React 中的 组件是由一个或多个Elements构成的。 DOM不同, ReactElement s 是纯粹的 JS 对象。利用 React 生成的DOM会根据 React elements的数据变化实时更新。 1 . RE挂载到DOM节点: 1 const element = <h1>Hello, world</h1 . . .
    interface PreProcessorProps { error?: boolean | BooleanFunction loading?: boolean | BooleanFunction children : React . ReactNode | RenderFunction const PreProcessor: React . FC = ({ children }) => { return children 在使用ts写 React 时,尴尬的遇到了这个错误 不能将类型“({
    React 的核心为组件。你可以像嵌套HTML标签一样嵌套使用这些组件,这使得编写 JS X更加容易因为它类似于标记语言。 当我刚开始学习 React 时,当时我认为“使用 props . children 就这么回事,我知道它的一切”。我错了。。 因为我们使用的事JavaScript,我们会改变 children 。我们能够给它们发送特殊的属性,以此来决 . . .
    type React Child = ReactElement | React Text; interface ReactNode Array extends Array< ReactNode > {} type React Fragment = {} | ReactNode Array; type ReactNode = React Child | React Fragment | React Portal | boolean | null .