跳到内容
+

用法

了解使用 MUI Base 组件的基础知识。

响应式 meta 标签

MUI Base 是一个移动优先的组件库——我们首先为移动设备编写代码,然后根据需要在必要时使用 CSS 媒体查询来放大组件。

为了确保所有设备的正确渲染和触摸缩放,请将响应式视口 meta 标签添加到您的 <head> 元素

<meta name="viewport" content="initial-scale=1, width=device-width" />

共享 props

Base 组件是自支持的,并且在隔离状态下功能齐全。

每个组件都有自己独特的 API,但所有非实用组件都接受以下共享 props

slots

`slots` prop 是一个对象,允许您覆盖基本组件本身的任何内部子组件——称为 slots

您可以使用 `slots` prop 通过自定义组件或 HTML 元素来覆盖默认 slots。

例如,MUI Base Badge 组件默认渲染一个 `<span>`。下面的代码片段展示了如何通过将 `<div>` 分配给 root slot 来覆盖它

<Badge slots={{ root: 'div' }} />

slotProps

`slotProps` prop 是一个对象,其中包含组件内所有 slots 的 props。您可以使用它为组件的内部元素定义其他自定义 props。

例如,下面的代码片段展示了如何将自定义 CSS 类添加到 MUI Base Badge 组件的 badge slot

<Badge slotProps={{ badge: { className: 'my-badge' } }} />

放置在主组件上的所有其他 props 也将传播到 root slot 中(就像它们被放置在 `slotProps.root` 中一样)。

这两个例子是等效的

<Badge id="badge1">
<Badge slotProps={{ root: { id: 'badge1' } }}>

最佳实践

如果您正在自定义像 Button 这样只有一个 root slot 的组件,您可能更喜欢使用更简洁的 `component` prop 而不是 `slots`。

使用 `component` 进行覆盖可以让您将该元素的属性直接应用于 root。例如,如果您将 Button root 替换为 `<li>` 标签,您可以将 `<li>` 属性 `value` 直接添加到组件。如果您对 `slots.root` 执行相同的操作,则需要将此属性放在 `slotProps.root` 对象上,以避免 TypeScript 错误。

组件 vs. hooks

MUI Base 包含两种构建块:组件和 hooks。

许多 MUI Base 组件是在 React hooks 的帮助下实现的。在构建自定义组件时,您可以使用组件或 hooks——或者两者结合使用。

一般来说,我们建议您从组件开始构建,如果您发现自己受到可用自定义选项的限制,那么请考虑重构您的组件以使用相应的 hook。

每种选择都有其自身的权衡

组件

优点

  • 通常需要更少的代码来实现
  • 默认配备无障碍访问功能

缺点

  • 对渲染的 HTML 结构控制较少

Hooks

优点

  • 完全控制渲染的 HTML 结构

缺点

  • 通常需要更多代码来实现
  • 需要额外的步骤才能使生成的组件可访问

有关 hooks 用法的详细信息,请参阅其相应的组件文档。