@blocklet/ui-react
Version:
Some useful front-end web components that can be used in Blocklets.
136 lines (99 loc) • 4.9 kB
Markdown
# 工具
本節提供了一系列輔助元件、高階元件 (HOCs) 和工具函式的說明文件。這些工具旨在簡化常見的開發任務、管理應用程式主題以及處理複雜的資料結構。
可用的主要工具有:
<x-cards data-columns="2">
<x-card data-title="圖示元件" 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),如果應用程式處於「嵌入模式」,它會防止元件被渲染。它會檢查一個 session storage 的鍵 (`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` 元件的全面指南,請參閱下一節。
- **[圖示](./components-utilities-icon.md)**