@blocklet/ui-react
Version:
Some useful front-end web components that can be used in Blocklets.
106 lines (76 loc) • 4.32 kB
Markdown
`Icon` 组件是一个基于 Material-UI 的 `Avatar` 组件构建的灵活实用工具。它旨在从多种来源渲染图标,包括 [Iconify](https://iconify.design/) 图标字符串、图像 URL 和基于字符的“字母头像”。这种多功能性使其成为一个标准化组件,可用于处理应用程序中的大多数图标和头像显示需求。
`Icon` 组件接受以下 props:
<x-field-group>
<x-field data-name="icon" data-type="string" data-required="true">
<x-field-desc markdown>图标的主要标识符。组件会根据字符串的格式智能地确定如何渲染它。它可以是 Iconify 字符串(例如 `mdi:home`)、直接的图像 URL 或用于生成字母头像的简单字符串(例如 “U”)。</x-field-desc>
</x-field>
<x-field data-name="size" data-type="number" data-required="false">
<x-field-desc markdown>以像素为单位,为图标容器设置统一的 `width` 和 `height`。</x-field-desc>
</x-field>
<x-field data-name="sx" data-type="BoxProps['sx']" data-required="false">
<x-field-desc markdown>用于自定义样式的 `sx` prop,与 Material-UI 的系统一致。</x-field-desc>
</x-field>
<x-field data-name="..." data-type="AvatarProps" data-required="false">
<x-field-desc markdown>该组件也接受 Material-UI [Avatar](https://mui.com/material-ui/react-avatar/) 组件支持的任何其他 props,例如 `variant`、`alt` 和 `onClick`。</x-field-desc>
</x-field>
</x-field-group>
以下是演示 `Icon` 组件不同使用方式的实际示例。
要显示来自 Iconify 生态系统的图标,请将其唯一的字符串标识符提供给 `icon` prop。该组件将动态加载并渲染相应的 SVG。
```jsx 显示 Iconify 图标 icon=mdi:react
import Icon from '@blocklet/ui-react/lib/Icon';
export default function IconifyExample() {
return <Icon icon="mdi:react" size={48} />;
}
```
此示例渲染了 Material Design Icons 集合中的 “react” 图标。
您可以通过将其 URL 传递给 `icon` prop 来直接渲染图像。该组件将检测 URL 格式,并将其用作 Avatar 内 `<img>` 标签的 `src`。
```jsx 从 URL 渲染图标 icon=mdi:image
import Icon from '@blocklet/ui-react/lib/Icon';
export default function ImageUrlExample() {
return <Icon icon="https://www.arcblock.io/image-bin/uploads/eb1cf5d60cd85c42362920c49e3768cb.svg" size={48} />;
}
```
如果 `icon` prop 接收到的字符串既不是有效的 Iconify 图标也不是 URL,它将使用该字符串的第一个字符渲染一个字母头像。这对于用户个人资料的占位符很有用。
```jsx 创建字母头像 icon=mdi:format-letter-case
import Icon from '@blocklet/ui-react/lib/Icon';
export default function LetterAvatarExample() {
return <Icon icon="Blocklet" size={48} variant="rounded" sx={{ bgcolor: 'primary.main', color: 'primary.contrastText' }} />;
}
```
在这种情况下,组件将显示字母 “B”。请注意 `variant` 和 `sx` props 的使用,它们被直接传递给底层的 Material-UI Avatar。
`size` prop 提供了一种便捷的方式来控制图标的尺寸。
```jsx 调整图标尺寸 icon=mdi:ruler
import Icon from '@blocklet/ui-react/lib/Icon';
export default function SizingExample() {
return (
<div>
<Icon icon="mdi:home" size={24} />
<Icon icon="mdi:home" size={32} />
<Icon icon="mdi:home" size={48} />
</div>
);
}
```
此示例展示了以三种不同尺寸渲染的同一个图标。
由于 `Icon` 组件是 Material-UI 的 `Avatar` 的包装器,您可以使用任何 `Avatar` prop 来自定义其外观。例如,您可以使用 `variant` prop 来改变形状。
```jsx 使用 Avatar props 进行自定义 icon=mdi:shape
import Icon from '@blocklet/ui-react/lib/Icon';
export default function AvatarPropsExample() {
return (
<div>
<Icon icon="B" variant="circular" size={48} sx={{ bgcolor: 'secondary.main' }} />
<Icon icon="L" variant="rounded" size={48} sx={{ bgcolor: 'success.main' }} />
<Icon icon="T" variant="square" size={48} sx={{ bgcolor: 'info.main' }} />
</div>
);
}
```
这演示了如何创建圆形、圆角和方形的头像。