目录
- 一、什么是 children
- 二、基本用法
- 三、类型定义(TypeScript)
- 四、一些高级用法
- 1. 条件渲染 children
- 2. 多个 children 插槽(命名插槽)
- 五、children 的优势
- 总结
在 React 中,children
是一个非常重要且特殊的 内置属性,它表示组件标签之间的嵌套内容。
一、什么是 children
举个例子:
const MyCard = ({ children: React.ReactNode }) => {return <div className="card"><div>title</div>{children}</div>;
};<MyCard><p>这是卡片内容</p>
</MyCard>
在这个例子中:
<p>这是卡片内容</p>
就是传给MyCard
的children
MyCard
组件可以通过props.children
访问到它
二、基本用法
const Wrapper = ({ children }: { children: React.ReactNode }) => {return <div className="wrapper">{children}</div>;
};// 使用
<Wrapper><h1>Hello</h1><p>World</p>
</Wrapper>
在 Wrapper
中,children
就是一个 ReactNode
类型的元素数组。
三、类型定义(TypeScript)
常用类型写法:
类型 | 描述 |
---|---|
React.ReactNode | 最常用,支持所有可渲染内容(JSX、字符串、null、数组等) |
React.ReactElement | 更严格,只允许一个有效的 React 元素 |
ReactNode[] | 明确是多个节点(不推荐,ReactNode 已包含) |
type Props = {children: React.ReactNode;
};
四、一些高级用法
1. 条件渲染 children
const ConditionalBox = ({ children, visible }: { children: React.ReactNode; visible: boolean }) => {return visible ? <div>{children}</div> : null;
};
2. 多个 children 插槽(命名插槽)
const Layout = ({ header, content }: { header: React.ReactNode; content: React.ReactNode }) => (<div><div>{header}</div><main>{content}</main></div>
);<Layout header={<h1>头部</h1>}content={<p>正文内容</p>}
/>
五、children 的优势
- ✅ 灵活嵌套
- ✅ 适合做布局容器组件、UI 包裹组件
- ✅ 组合式组件(如
Card
,Modal
,Tabs
)几乎都依赖children
总结
点 | 内容 |
---|---|
定义 | children 是组件内部嵌套的内容 |
类型 | React.ReactNode 最常用 |
用途 | 实现通用组件、插槽功能 |
特点 | 灵活、结构清晰、提升复用性 |