当前位置:首页 > React

react如何使用插槽

2026-01-24 02:10:13React

使用props.children实现基础插槽

React中插槽的核心是通过props.children传递子组件。父组件在标签内部放置的内容会自动成为children属性:

// 父组件
<Card>
  <h1>标题内容</h1>
  <p>正文内容</p>
</Card>

// 子组件Card
function Card(props) {
  return <div className="card">{props.children}</div>;
}

命名插槽实现方式

通过传递React元素作为props实现具名插槽效果:

react如何使用插槽

// 父组件
<Layout
  header={<Header />}
  sidebar={<Sidebar />}
  content={<MainContent />}
/>

// 子组件Layout
function Layout({ header, sidebar, content }) {
  return (
    <div>
      <div className="header">{header}</div>
      <div className="sidebar">{sidebar}</div>
      <div className="content">{content}</div>
    </div>
  );
}

使用render props模式

通过函数作为子组件实现更灵活的插槽:

// 父组件
<DataProvider>
  {(data) => <Display data={data} />}
</DataProvider>

// 子组件DataProvider
function DataProvider(props) {
  const [data, setData] = useState(null);
  // 获取数据逻辑...
  return props.children(data);
}

组合组件模式

通过组件组合实现类似Vue的作用域插槽:

react如何使用插槽

// 定义可组合组件
function Tabs({ children }) {
  const [activeTab, setActiveTab] = useState(0);
  return (
    <div>
      {React.Children.map(children, (child, index) =>
        React.cloneElement(child, {
          isActive: index === activeTab,
          onClick: () => setActiveTab(index)
        })
      )}
    </div>
  );
}

// 使用方式
<Tabs>
  <Tab label="First">内容1</Tab>
  <Tab label="Second">内容2</Tab>
</Tabs>

Context API实现跨组件插槽

通过Context实现深层嵌套组件间的插槽通信:

const SlotContext = createContext();

// 提供者组件
function SlotProvider({ children, slots }) {
  return (
    <SlotContext.Provider value={slots}>
      {children}
    </SlotContext.Provider>
  );
}

// 消费者组件
function NamedSlot({ name }) {
  const slots = useContext(SlotContext);
  return slots[name] || null;
}

类型检查与默认值

为插槽添加PropTypes类型检查和默认值:

Card.propTypes = {
  children: PropTypes.node,
  header: PropTypes.element,
  footer: PropTypes.element
};

Card.defaultProps = {
  header: <DefaultHeader />
};

分享给朋友:

相关文章

如何使用 react native

如何使用 react native

安装开发环境 确保已安装 Node.js(建议使用 LTS 版本)。通过以下命令安装 React Native 命令行工具: npm install -g expo-cli 或使用 Yarn: y…

react 如何使用canvas

react 如何使用canvas

使用 Canvas 在 React 中的方法 基本用法 在 React 中使用 canvas 需要通过 useRef 或 createRef 获取 DOM 节点。以下是一个简单的示例: im…

react如何使用webview

react如何使用webview

使用 React 实现 WebView 的方法 在 React 中,可以通过不同的方式实现 WebView 功能,具体取决于开发环境(如 React Native 或 Web 应用)。以下是常见的实现…

react refs如何使用

react refs如何使用

React Refs 的基本概念 Refs 提供了一种直接访问 DOM 节点或 React 组件实例的方式。通常在需要直接操作 DOM 或访问组件方法时使用。 创建 Refs 使用 React.c…

uniapp插槽样式

uniapp插槽样式

uniapp插槽样式的基本用法 在UniApp中使用插槽时,样式处理与普通组件类似,但需要注意作用域问题。父组件传递内容到子组件插槽时,样式默认受父组件作用域影响。 子组件中定义插槽: <v…

vue插槽实现方法

vue插槽实现方法

Vue 插槽的基本概念 插槽(Slot)是 Vue 组件化开发中的重要功能,允许父组件向子组件传递模板片段,实现内容分发。插槽分为默认插槽、具名插槽和作用域插槽三种类型。 默认插槽的实现 默认插槽是…