本文档帮助你从 STDF v1.x 升级到 v2.0.0。v2 版本包含多项破坏性变更,请仔细阅读并按照指南进行迁移。
v1 版本使用 JS 对象配置主题,v2 版本升级为 Tailwind CSS 插件 + data-theme 属性。
// v1: 引入主题配置对象,使用 switchTheme 传入配置对象
import { switchTheme } from 'stdf/theme';
import { nintendo } from 'stdf/theme';
// 切换主题,传入主题配置对象
switchTheme(nintendo);
/* 在 app.css 中配置主题插件 */
@plugin "stdf/theme" {
name: "Nintendo";
}
/* 或使用多个主题 */
@plugin "stdf/theme" {
name: "Nintendo, Ocean, Forest";
}
/* 或加载所有 42 套内置主题 */
@plugin "stdf/theme" {
all: true;
}
<!-- 在 HTML 中使用 data-theme 属性 -->
<html data-theme="Nintendo">
// 使用 switchTheme 切换主题
import { switchTheme, getTheme } from 'stdf/theme';
switchTheme('Nintendo');
const currentTheme = getTheme();
v1 版本使用 .dark 类名 + darkMode 函数,v2 版本升级为 data-mode 属性 + switchMode 函数。
/* v1: 在 app.css 中配置暗色模式,使用 .dark 类名 */
@custom-variant dark (&:where(.dark, .dark *));
// v1: 使用 darkMode
import { darkMode } from 'stdf/theme';
darkMode(); // 切换到暗色模式
darkMode(false); // 切换到亮色模式
/* v2: 在 app.css 中配置暗色模式,使用 data-mode 属性 */
@custom-variant dark (&:where([data-mode=dark], [data-mode=dark] *):not(:where([data-mode=light], [data-mode=light] *):not([data-mode=dark], [data-mode=dark] *)));
v2 支持嵌套模式切换,可以在暗色区域内嵌入亮色区域,反之亦然。
// v2: 使用 switchMode 和 getMode
import { switchMode, getMode } from 'stdf/theme';
switchMode('dark'); // 切换到暗色模式
switchMode('primary'); // 切换到亮色模式
const currentMode = getMode(); // 获取当前模式
以下导出已从 stdf/theme 中移除:
darkMode - 改用 switchModeSTDFTheme - 改用 @plugin "stdf/theme" + data-themenintendo、ocean 等)- 改用插件内置主题import {
switchTheme, // 切换主题
switchMode, // 切换亮暗模式
getTheme, // 获取当前主题
getMode, // 获取当前模式
generateColorScale, // 生成颜色梯度
themes, // 内置主题列表
stdfThemePlugin // Tailwind CSS 插件
} from 'stdf/theme';
| 变更类型 | v1 | v2 | 说明 |
|---|---|---|---|
| 属性重命名 | line |
border |
边框风格属性重命名 |
| 选项调整 | fill: 'lineTheme' |
fill: 'lineState' |
线框主题色改为状态色 |
| 选项调整 | fill: 'textTheme' |
fill: 'textState' |
文字主题色改为状态色 |
| 属性移除 | group |
- | 按钮组改用 ButtonGroup 组件 |
| 选项扩展 | radius |
radius |
补充更多等级并支持空值 |
// v1
<Button line fill="lineTheme" group />
// v2
<Button border fill="lineState" />
// 按钮组使用 ButtonGroup 组件
<ButtonGroup>
<Button>按钮1</Button>
<Button>按钮2</Button>
</ButtonGroup>
| 变更类型 | v1 | v2 | 说明 |
|---|---|---|---|
| 组件移除 | Avatars |
AvatarGroup |
头像组改为独立组件 |
| 选项调整 | radius: '3xl' |
- | 移除 3xl,新增 xs、md、lg |
| 默认值 | - | 主题圆角 | 默认圆角调整为主题圆角 |
// v1
import { Avatar, Avatars } from 'stdf';
<Avatars list={avatarList} />
// v2
import { Avatar, AvatarGroup } from 'stdf';
<AvatarGroup list={avatarList} />
| 变更类型 | v1 | v2 | 说明 |
|---|---|---|---|
| 属性移除 | allowBodyScroll |
- | 滚动由内部逻辑接管 |
| 选项新增 | - | radiusPosition: 'auto' \| 'none' |
自动根据弹出方向处理圆角 |
| 选项扩展 | radius |
radius |
扩展并调整默认值 |
| 变更类型 | v1 | v2 | 说明 |
|---|---|---|---|
| 选项移除 | style: 'danger' |
style: 'error' |
danger 改为 error |
| 选项移除 | style: 'disabled' |
disabled: true |
禁用改为独立属性 |
| 属性新增 | - | disabled |
Action Props 新增禁用属性 |
| 属性新增 | - | icon |
Action Props 新增图标属性 |
| 选项新增 | - | style: 'success' \| 'warning' \| 'info' |
新增状态样式 |
// v1
const actions = [
{ label: '删除', style: 'danger' },
{ label: '禁用项', style: 'disabled' }
];
// v2
const actions = [
{ label: '删除', style: 'error' },
{ label: '禁用项', disabled: true }
];
| 变更类型 | v1 | v2 | 说明 |
|---|---|---|---|
| 属性新增 | - | showSteps |
支持档位显示 |
| 属性新增 | - | stepsStyle |
档位样式配置 |
| 属性新增 | - | stepLabels |
自定义档位标签 |
| 事件增强 | onchange(value) |
onchange(value, label, rangeLabel) |
增加标签参数 |
| 变更类型 | v1 | v2 | 说明 |
|---|---|---|---|
| 属性新增 | - | multiple |
多选模式 |
| 属性新增 | - | multipleSelected |
多选已选值 |
| 事件新增 | - | onmultiplechange |
多选变化事件 |
| 属性新增 | - | multipleIcon |
多选图标 |
| 属性新增 | - | multipleIconActive |
多选激活图标 |
| 变更类型 | v1 | v2 | 说明 |
|---|---|---|---|
| 属性新增 | - | card |
支持通过 Card 配置月份卡片 |
| 属性新增 | - | initSelectedDates |
初始化已选日期 |
| 属性增强 | popup |
popup: null |
支持传 null 直接展示 |
| 变更类型 | v1 | v2 | 说明 |
|---|---|---|---|
| 类型新增 | - | fullKeyboard |
全键盘输入类型 |
| 类型新增 | - | colorPicker |
颜色选择器类型 |
| 属性升级 | card: boolean |
card: CardProps |
从布尔值升级为对象配置 |
| 属性移除 | mx、px、radius、shadow |
- | 移除独立配置,改用 card 统一配置 |
// v1
<Form card mx="4" px="4" radius="lg" shadow="md" />
// v2
<Form card={{ mx: '4', px: '4', radius: 'lg', shadow: 'md' }} />
大部分组件的 radius 属性进行了以下调整:
xs、3xl、4xl)--radius-box 或 --radius-form)受影响的组件:
以下组件的 popup 属性支持传入 null,可直接在页面内展示而不使用弹出层:
NumKeyboard 数字键盘
// 直接在页面内展示,不使用弹出层
<Picker popup={null} />
<Calendar popup={null} />
v2 版本新增了以下组件:
v2 新增了函数式调用反馈组件的能力,支持 toast、showAlert、dialog、modal、loading 等方法,可在任意位置通过函数调用使用反馈组件。详见 函数式反馈。
@plugin "stdf/theme"darkMode 迁移到 switchMode@custom-variant darkline → border,group → ButtonGroupAvatars → AvatarGroupdanger → error,disabled 改为属性card 从布尔值改为对象allowBodyScrollradius 默认值变化如果在升级过程中遇到问题,可以: