react如何实现slot
在React中,实现类似Vue的"slot"功能可以通过多种方式完成,主要依赖于React的组件组合(Composition)特性。以下是几种常见方法:
使用props.children
React组件默认通过props.children接收子元素,这是最接近Vue默认插槽的实现方式:

// 父组件
<ParentComponent>
<div>这是插入的内容</div>
</ParentComponent>
// 子组件
function ParentComponent({ children }) {
return <div className="container">{children}</div>;
}
命名插槽(Named Slots)
通过props传递React元素实现命名插槽效果:

// 父组件
<Layout
header={<Header />}
content={<MainContent />}
footer={<Footer />}
/>
// 子组件
function Layout({ header, content, footer }) {
return (
<div>
<div className="header">{header}</div>
<div className="content">{content}</div>
<div className="footer">{footer}</div>
</div>
);
}
作用域插槽(Scoped Slots)
通过render props模式实现作用域插槽功能:
// 父组件
<DataProvider render={(data) => <Display data={data} />} />
// 子组件
function DataProvider({ render }) {
const data = fetchData();
return <div>{render(data)}</div>;
}
Context API高级用法
结合Context API可以实现更复杂的插槽逻辑:
const SlotContext = React.createContext();
// 父组件
<SlotProvider>
<Slot name="header" />
<ComponentUsingSlots />
</SlotProvider>
// 子组件
function Slot({ name }) {
const { registerSlot } = useContext(SlotContext);
// 注册插槽逻辑...
}
注意事项
- React插槽本质是组件组合,比Vue的slot更灵活但需要手动管理
- 大型项目可考虑使用第三方库如
@fluentui/react-components的插槽系统 - 在TypeScript项目中需要正确定义插槽的props类型






