Semi Design v2.99.0:级联筛选修复与中后台实战入门

2026-05-22 22 预计阅读时间:1 分钟
来源:oschina.net AI 摘要 原文链接

免责声明:本文为 AI 摘要整理,建议结合原文阅读。摘要可能省略上下文、版本差异或边界条件,不作为官方说明。

预计阅读时间:8 分钟

字节跳动抖音前端与 UED 团队维护的 Semi Design 又推新版。v2.99.0 虽以修复为主,但涉及的 Cascader filterTreeNode 问题在日常业务中高频出现——级联选择器开启节点筛选后行为异常,直接影响表单交互体验。借此版本更新,我们梳理一下 Semi Design 的核心定位,并用一个可跑的项目示例把 Cascader 筛联筛选的正确用法落地。

级联筛选的坑与修复

Cascader(级联选择器)在中后台场景里承担地区选择、分类筛选等职责。filterTreeNode 属性允许用户输入关键词动态过滤节点,这在选项层级深、数据量大时几乎是必开的功能。

v2.99.0 之前,开启 filterTreeNode 后存在边界情况:当搜索结果跨多级时,选中路径回填或面板展开逻辑可能出现偏差,导致用户选了却看不到正确回显,或者面板折叠状态与预期不符。这类 bug 在数据层级超过三级时更容易触发。

修复后,筛选命中节点的路径回填和面板联动恢复一致。如果你此前因为这个问题绕开 filterTreeNode、改用自定义搜索方案,现在可以回归原生属性。

Semi Design 的定位:中后台优先

Semi Design 不是通用 UI 库的"又一个替代品",它的设计语言和组件 API 明确面向中后台:

  • 设计语言内置:间距、色板、圆角、阴影体系已预设,不需要从零搭设计规范。
  • 主题系统灵活:通过 Design Token 覆盖,从品牌色到组件细节都能一键切换,不需要 fork 源码改样式。
  • React 组件覆盖面广:表单、表格、导航、图表容器、上传等 60+ 组件,API 偏实用而非炫技。

对于需要快速交付内部工具、运营后台、数据看板的团队,Semi 的"开箱即用"不是营销话术——它确实省掉了设计规范对齐和基础组件造轮子的阶段。

实战:Cascader 筛选 + 主题定制

下面用一个最小可跑的 React 项目演示两件事:Cascader 开启 filterTreeNode 的正确写法,以及 Semi Design Token 主题覆盖。

项目初始化

npm create vite@latest semi-demo -- --template react
cd semi-demo
npm install @douyinfe/semi-ui @douyinfe/semi-icons
npm run dev

Cascader 级联筛选示例

src/App.jsx 替换为以下内容:

import { Cascader, Form, Button } from '@douyinfe/semi-ui';
import { IconSearch } from '@douyinfe/semi-icons';

// 模拟三级分类数据
const options = [
  {
    value: 'electronics',
    label: '电子产品',
    children: [
      {
        value: 'phone',
        label: '手机',
        children: [
          { value: 'iphone', label: 'iPhone' },
          { value: 'pixel', label: 'Pixel' },
          { value: 'xiaomi', label: '小米' },
        ],
      },
      {
        value: 'laptop',
        label: '笔记本',
        children: [
          { value: 'macbook', label: 'MacBook' },
          { value: 'thinkpad', label: 'ThinkPad' },
        ],
      },
    ],
  },
  {
    value: 'clothing',
    label: '服装',
    children: [
      {
        value: 'men',
        label: '男装',
        children: [
          { value: 'shirt', label: '衬衫' },
          { value: 'jacket', label: '夹克' },
        ],
      },
      {
        value: 'women',
        label: '女装',
        children: [
          { value: 'dress', label: '连衣裙' },
          { value: 'coat', label: '大衣' },
        ],
      },
    ],
  },
];

function App() {
  return (
    <div style={{ padding: 40, maxWidth: 600 }}>
      <h3>商品分类选择支持搜索筛选</h3>
      <Form layout="horizontal">
        <Form.Select field="category" label="分类">
          <Cascader
            style={{ width: 360 }}
            options={options}
            filterTreeNode
            placeholder="输入关键词筛选,如「小米」「夹克」"
            showSearch
            showNextLevel={false}
            onChange={(value) => console.log('选中路径:', value)}
          />
        </Form.Select>
        <Button theme="solid" type="primary" htmlType="submit">
          提交
        </Button>
      </Form>
    </div>
  );
}

export default App;

关键点说明:

  • filterTreeNode 开启后,用户在输入框键入关键词,Semi 会跨所有层级匹配 label,命中节点的完整路径自动展示。v2.99.0 修复了此前路径回填不一致的问题。
  • showNextLevel={false} 让搜索结果只显示命中节点本身而非逐级展开,适合选项多、层级深的场景。
  • onChange 回调返回的是完整路径数组,如 ['electronics', 'phone', 'xiaomi'],直接对接后端分类 ID 链。

主题覆盖:一行改品牌色

Semi 的 CSS Variable 体系让主题切换不需要编译步骤。在 src/index.css 或全局样式文件顶部加入:

:root {
  /* 主品牌色:从默认蓝改为抖音红 */
  --semi-color-primary: #fe2c55;
  --semi-color-primary-hover: #e8244d;
  --semi-color-primary-active: #d01a42;
  /* 圆角:从 4px 改为更圆润的 8px */
  --semi-border-radius-small: 8px;
  --semi-border-radius-medium: 12px;
}

刷新页面后,所有 Button、Cascader、Form 的主色调和圆角同步变化,无需改组件代码。这套 Token 覆盖机制在多品牌/多租户后台里尤其实用——不同客户切换主题只需替换 CSS 变量文件。

升级与采用建议

已有项目升级:v2.99.0 是修复版本,无破坏性 API 变动。直接升级即可:

npm install @douyinfe/semi-ui@2.99.0

如果你用了 Cascader + filterTreeNode,升级后验证搜索选中回填是否恢复正常,重点测三级以上数据。

新项目评估:考虑以下几点——

维度 Semi Design 适合 不适合
场景 中后台表单/表格/导航密集型 营销 H5、强视觉定制 C 端
技术栈 React 18+ Vue / Angular
设计资源 无独立设计团队,需要现成规范 有完整品牌设计系统,需深度定制
主题需求 多租户/多品牌切换 单一品牌、样式改动极少

Semi Design 的组件覆盖度和主题灵活性在中后台赛道里属于前列。v2.99.0 的 Cascader 修复看似小改动,但对依赖级联筛选的表单流程来说是稳定性补丁。如果你在选型阶段,建议用上面的示例项目跑一遍核心交互组件(Table、Form、Cascader、Navigation),感受 API 设计的一致性和主题切换的流畅度,再决定是否深入采用。


相关推荐