UI Design System
build dev

Tree

展示和操作层级数据。中文惯用名:树。
稳定本期新增已接入

元信息

字段值
规范 IDcomponent.tree
名称Tree
二级分类数据展示(data-display)
用途展示和操作层级数据
描述中文惯用名:树。

预览

静态结构:Tree 为自实现树(非第三方原语),根节点 role="tree",节点 role="treeitem"。每行 flex:含子节点时渲染 switcher 按钮(chevron-right 图标,展开时 rotate-90 旋转,transition-transform 过渡),无子节点渲染同宽占位;checkable 时在图标后渲染 Checkbox;标题文本 truncate。按深度缩进(paddingLeft = depth × 16 + 4 px);选中行 bg-accent 加粗;禁用节点(整树 disabled 或节点级 disabled)半透明且不可点。勾选为独立勾选(不联动父子),父节点在子孙存在勾选时显示半选(indeterminate)。展开 / 选中 / 勾选均支持受控(传 expandedKeys / selectedKeys / checkedKeys)与非受控(default*Keys 初始化内部状态)。

DSL 结构

DslNode
{
  "type": "Tree",
  "props": {
    "treeData": [
      {
        "key": "org",
        "title": "组织架构",
        "children": [
          {
            "key": "dev",
            "title": "研发部",
            "children": [
              {
                "key": "frontend",
                "title": "前端组"
              },
              {
                "key": "backend",
                "title": "后端组"
              }
            ]
          },
          {
            "key": "design",
            "title": "设计部"
          }
        ]
      }
    ],
    "defaultExpandedKeys": [
      "org",
      "dev"
    ],
    "checkable": true
  }
}

何时用

何时使用

  • 展示和操作层级数据:组织架构、目录、分类、地区等多级结构。
  • 需要逐层展开 / 收起浏览父子关系,或按节点单选定位。
  • 需要对层级节点做独立勾选(如权限点、资源多选),父节点以半选反映子孙勾选。

何时不用

  • 仅折叠 / 展开平级分组内容、不表达层级数据:使用 Accordion。
  • 平级视图或模式切换:使用 Segmented 或 Tabs,Tree 不承载内容面板切换。
  • 行列对齐的批量数据操作:使用 Table(树表联动场景 Tree 仅作层级侧栏)。
  • 线性步骤或流程进度:使用 Steps / Timeline。

变体

变体视觉形态适用场景
默认(可选择)chevron 展开 + 缩进层级,选中行高亮目录、分类浏览与单选定位
checkable 可勾选节点前复选框,支持半选权限配置、资源多选等层级勾选
受控模式expandedKeys / selectedKeys / checkedKeys 外部驱动与外部状态联动(如树表联动、搜索结果定位展开)
非受控模式defaultExpandedKeys / defaultSelectedKeys / defaultCheckedKeys 初始化独立展示,交互状态由组件自管
禁用态整树或节点级半透明、不可交互只读查看或无权限节点的展示

API 属性

属性类型默认值说明
treeDataTreeNodeData[][]树数据(可含表达式解析后的数组);节点结构 { key, title, children?, disabled? }
expandedKeysstring[]—受控展开 keys;传入即受控,需配合 onExpand 更新
defaultExpandedKeysstring[]—非受控初始展开 keys
selectedKeysstring[]—受控选中 keys;传入即受控,需配合 onSelect 更新
defaultSelectedKeysstring[]—非受控初始选中 keys
checkablebooleanfalse节点前显示勾选框;勾选为独立勾选,父节点按子孙勾选状态显示半选
checkedKeysstring[]—受控勾选 keys;传入即受控,需配合 onCheck 更新
defaultCheckedKeysstring[]—非受控初始勾选 keys
disabledbooleanfalse整树禁用;节点级禁用用 treeData 节点的 disabled
onSelect(keys: string[]) => void—选中事件,传出选中 keys 数组(单选语义,数组含当前选中节点 key)
onExpand(keys: string[]) => void—展开事件,传出最新展开 keys 数组
onCheck(keys: string[]) => void—勾选事件,传出最新勾选 keys 数组
classNamestring—通用:根节点 class(与内置样式合并)
styleCSSProperties—通用:根节点内联样式

使用规范

  • 节点 key 必须全局唯一且稳定,作为展开 / 选中 / 勾选三类状态的唯一标识。
  • 受控与非受控二选一:传 expandedKeys / selectedKeys / checkedKeys 即受控,必须在对应事件中回写;只用 default*Keys 时组件自管状态。
  • 选中为单选语义(点击标题选中当前节点);需要多选时开启 checkable 而非依赖 selected。
  • 勾选为独立勾选:勾选父节点不会自动勾选子孙,父节点仅以半选提示子孙存在勾选,业务侧按 checkedKeys 自行解释。
  • 节点级禁用(节点 disabled)用于无权限或不可选分支;整树只读用 disabled 整体禁用。
  • 层级缩进固定 16px / 级,标题超长 truncate,重要完整名称通过详情区或 Tooltip 补充。

正例

  • ✓ 组织选择:checkable + defaultExpandedKeys 展开前两级,onCheck 收集勾选 keys 提交权限配置。
  • ✓ 树表联动:selectedKeys 受控,onSelect 回写并刷新右侧 Table 数据。
  • ✓ 目录浏览:非受控模式,用户自行展开收起,点击标题定位资源。

反例

  • ✕ 用 Tree 折叠平级的内容分组(无父子数据语义,应使用 Accordion)。
  • ✕ 传入受控 keys 却不处理对应事件回写,导致状态卡住无法交互。
  • ✕ 预期勾选父节点自动级联勾选子孙(实现为独立勾选,需业务侧自行处理级联)。

Design Token 映射

不适用:组件 tokenRefs 为空:样式 Token 数据尚未接入,三层映射(Primitive → Semantic → Component)待样式 Token 接入后回填。