从 0 到 1 开发 Splicetree无头树:为什么做一个无头树(Headless Tree)

6 阅读1分钟

树的难点不在“长什么样”,而在“怎么交互”。展开/收起、勾选/半选、拖拽、搜索、键盘导航、单选/多选/范围选择……如果把这些都写在组件里,维护成本会越来越高。

SpliceTree 选择“无头(Headless)”路线:核心只负责树的结构与行为,渲染由你自己决定(Vue/React/Svelte/原生 DOM 都行)。这样一来,逻辑和 UI 解耦,交互更容易复用与组合。

  • 相关链接:

这条路能解决什么

  • UI 自由:你可以用任何组件体系或自己写 DOM
  • 交互可组合:用插件按需添加能力(勾选/拖拽/搜索/键盘/懒加载)
  • 逻辑可复用:同一套树逻辑在不同页面或项目直接复用

一个最小示例

import { createSpliceTree } from '@splicetree/core'

const data = [
  { id: 'a', title: 'A' },
  { id: 'b', title: 'B', parent: 'a' },
]

const tree = createSpliceTree(data, {
  keyField: 'id',
  parentField: 'parent',
  defaultExpanded: ['a'],
})

for (const node of tree.items()) {
  console.log(node.id, node.level)
}

本系列会讲什么

  • 核心数据模型与可见节点计算
  • 事件系统与插件机制
  • 输入插件(keyboard、pointer)与行为插件(selectable、checkable)
  • 常用插件(拖拽、搜索、懒加载)
  • Vue 适配器与工程化发布