You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React组件为何识别children属性?两种包装写法原理探究

嘿,这个问题问得特别到位,我来给你把底层逻辑拆解明白~

首先:React组件为啥能识别children属性?

这其实是React的内置约定:不管是函数组件还是类组件,当你在JSX里给组件嵌套内容时,React会自动把这些嵌套内容打包成props.children传递给组件。

比如你写:

<MyCustomComponent>
  <p>我是子内容</p>
</MyCustomComponent>

React就会把<p>我是子内容</p>这个虚拟DOM节点,放到MyCustomComponent的props.children里,你在组件里直接用props.children就能拿到它。

你的第一种写法就是手动把props.children放到div里渲染,这完全符合React的设计逻辑。

然后:第二种写法里的{...props}为啥能替代{props.children}?

你第二种写法用了ES6的扩展运算符{...props},它的作用是把组件收到的所有props(包括children)全部传递给内部的div。

比如当你调用这个包装组件时:

<BoldWrapper>我要加粗的文字</BoldWrapper>

此时组件的props对象里就包含children: "我要加粗的文字",{...props}会把这个children属性和其他可能存在的props(比如你之后加的className、onClick等)一起传递给div,div自然就会渲染children内容,效果和第一种写法完全一致,但更灵活——如果之后需要给这个包装组件传递其他属性,不用修改组件代码就能直接透传给内部的div。

最后:React里的原生div能识别children吗?

当然可以!React对所有原生DOM元素(div、p、span等)做了封装,它们本质是React创建的虚拟DOM节点,同样遵循React的children约定。

当你写:

<div style={{ fontWeight: "bold" }}>我是加粗文字</div>

React会把"我是加粗文字"作为children属性传递给这个虚拟div节点,最终渲染成真实DOM时,就会把这段文字放到真实的div标签里。

简单说,原生元素在React里的children处理逻辑和自定义组件是打通的,你可以把children理解为React用来处理嵌套内容的统一机制,不管是自定义组件还是原生元素都支持。

内容的提问来源于stack exchange,提问作者dragonfly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:18:22