@blocklet/ui-react
Version:
Some useful front-end web components that can be used in Blocklets.
136 lines (99 loc) • 4.84 kB
Markdown
# 工具
本节提供了关于一系列辅助组件、高阶组件 (HOC) 和实用函数的文档。这些工具旨在简化常见的开发任务、管理应用程序主题和处理复杂的数据结构。
可用的主要工具有:
<x-cards data-columns="2">
<x-card data-title="Icon 组件" data-icon="lucide:image" data-href="/components/utilities/icon">
一个多功能组件,用于显示来自各种来源的图标,包括 Iconify、图片 URL 或字母头像。
</x-card>
<x-card data-title="OverridableThemeProvider" data-icon="lucide:palette">
一个主题提供程序,允许开发者提供自己的主题对象来覆盖默认的 Blocklet UI 主题。
</x-card>
<x-card data-title="withHideWhenEmbed HOC" data-icon="lucide:eye-off">
一个高阶组件,可有条件地渲染组件,在应用程序处于嵌入模式时将其隐藏。
</x-card>
<x-card data-title="JavaScript 辅助函数" data-icon="lucide:function-square">
一套用于执行递归数组操作、URL 验证和路径匹配等任务的独立函数。
</x-card>
</x-cards>
有关 `Icon` 组件的详细指南,请参阅其专门的文档页面。其他工具的文档如下。
## OverridableThemeProvider
该组件是 Material-UI `ThemeProvider` 的一个包装器。它允许您将一致的主题应用于其子组件。默认情况下,它使用标准的 Blocklet UI 主题,但您可以通过 `theme` 属性提供一个自定义主题对象来覆盖默认样式。
### 用法
要应用自定义主题,请将一个主题对象传递给 `theme` 属性。该组件会将您的覆盖项与默认主题合并。
```javascript Theme Provider Example icon=logos:javascript
import OverridableThemeProvider from '@blocklet/ui-react/lib/common/overridable-theme-provider';
import { Button } from '@mui/material';
const customTheme = {
palette: {
primary: {
main: '#ff5722',
},
},
};
function App() {
return (
<OverridableThemeProvider theme={customTheme}>
<Button color="primary" variant="contained">
Custom Themed Button
</Button>
</OverridableThemeProvider>
);
}
```
## withHideWhenEmbed
`withHideWhenEmbed` 是一个高阶组件 (HOC),如果应用程序处于“嵌入模式”,它会阻止组件渲染。它会检查一个会话存储键 (`EMBED_MODE_KEY`) 来确定当前模式。如果值为 `1`,被包装的组件将返回 `null`。
这在嵌入式上下文中非常有用,可以隐藏不需要的元素,如页眉或页脚。
### 用法
用 `withHideWhenEmbed` HOC 包装您希望有条件隐藏的组件。
```javascript HOC Example icon=logos:javascript
import withHideWhenEmbed from '@blocklet/ui-react/lib/libs/with-hide-when-embed';
function PageHeader() {
return (
<header>
<h1>My Application</h1>
</header>
);
}
const MaybeHiddenHeader = withHideWhenEmbed(PageHeader);
function App() {
return (
<div>
<MaybeHiddenHeader />
<main>
{/* 主内容放在这里 */}
</main>
</div>
);
}
```
## 辅助函数
提供了一组纯 JavaScript 函数,用于常见的数据操作和验证任务。这些函数可以直接从库的实用工具模块中导入。
### 数组操作
这些函数设计用于处理嵌套对象的数组,例如导航菜单或文件树。
| 函数 | 描述 |
| --- | --- |
| `mapRecursive(array, fn, childrenKey = 'children')` | 递归地将一个函数应用于嵌套数组中的每一项。 |
| `flatRecursive(array, childrenKey = 'children')` | 将嵌套数组扁平化为单层数组。 |
| `countRecursive(array, childrenKey = 'children')` | 计算嵌套数组中项目的总数。 |
| `filterRecursive(array, predicate, childrenKey = 'children')` | 根据谓词函数递归过滤嵌套数组,如果子项匹配,则保留父结构。 |
### 字符串和 URL 验证
用于检查字符串格式的简单辅助函数。
| 函数 | 描述 |
| --- | --- |
| `isUrl(str)` | 如果字符串以 `http://` 或 `https://` 开头,则返回 `true`。 |
| `isMailProtocol(str)` | 如果字符串以 `mailto:` 开头,则返回 `true`。 |
### 路由
用于辅助客户端路由逻辑的工具。
| 函数 | 描述 |
| --- | --- |
| `matchPath(path)` | 检查给定路径是否与当前的 `window.location.pathname` 匹配。 |
| `matchPaths(paths)` | 从一个路径数组中找到与当前位置最佳匹配的路径。 |
### 布局
| 函数 | 描述 |
| --- | --- |
| `splitNavColumns(items, options)` | 将导航项列表拆分为指定数量的列,可用于创建大型菜单。 |
---
### 总结
本节概述了库中包含的通用工具。要了解更强大、更专业的功能,请继续阅读各个组件的详细文档。
有关使用灵活的 `Icon` 组件的全面指南,请参阅下一节。
- **[Icon](./components-utilities-icon.md)**