@asup/tree-of-nodes

中文文档
3.1.1发布于 2026/10/13MITTypeScriptESM + CJS近 30 天下载 1795

REACT 字型树视图组件

中文使用文档
文档目录7 节
  1. 安装
  2. 节点树使用
  3. 属性
  4. 树节点数据
  5. iNode 更新
  6. 单项选择
  7. 多项选择

npm size npm bundle size License: MIT

@asup/tree-of-notes (英语)

因为我找不到我想要的.

与/需要靴子,反应-靴子,反应-靴子相接. 使用上下文菜单来方便添加/重命名/移动动作.

安装

# with npm
npm install @asup/tree-of-nodes

节点树使用

import { iNodeUpdate, TreeNodeData, TreeOfNodes } from '@asup/tree-of-nodes';
import '@asup/tree-of-nodes/dist/style.css';

... inside REACT component

<TreeOfNodes<T>
  id: string;
  nodeList: TreeNodeData<T>[];
  roots: Key[];
  multiSelect?: boolean;
  selectedIds?: Key | Key[];
  handleSelect?: (ret: Key | Key []) => void;
  onAdd?: (parentId: Key, newName: string) => Promise<iNodeUpdate>;
  onRemove?: (childId: Key) => Promise<iNodeUpdate>;
  onRename?: (childId: Key, newName: string) => Promise<iNodeUpdate>;
  canRemoveRoot?: boolean;
  canRenameRoot?: boolean;
  canAddChildren?: boolean;
  canRemoveChildren?: boolean;
  canRenameChildren?: boolean;
  nodeHighlight?: string;
  textHighlight?: string;
  />

组件需要类型节点列表 TreeNodeData<T> 具有独特性 React.Key编号.

属性

Prop说明默认
编号HTML id 属性
节点列表节点数据阵列
树根一个或多个要用作树根的节点键
多选择允许选择多于 1 idfalse
所选索引当前选中列表
手柄选择当一个节点被点击( 选中) 时调用函数, 用于更新选中的 Id() => {return;}
页:1添加新节点时调用函数, 用于更新节点列表
移动删除节点时调用函数, 用于更新节点列表
重命名时当一个节点被重新命名时调用函数, 这应该用于更新节点列表
可以移动旋转允许将根节点去除, 并结合关于 remove 函数的规格false
可重命名旋转允许将根节点重新命名, 并与关于 Rename 函数的规格相结合false
儿童状况允许增加儿童,同时说明关于Add的职能false
迁移儿童允许将非根节点的更名与关于再移动函数的规格相结合false
可重命名儿童允许将非根节点与关于再命名函数的规格合并重命名false
节点突出选定的节点突出显示颜色red
文本突出显示选中文本突出显示颜色rgba(255,0,0,0.2
拼写检查使用/ 禁用浏览器拼写检查"对"

树节点数据

节点列表所要求的格式,包括任何类型数据的持有者,在 TreeOfNodes 规格.

export type TreeNodeData<T> = {
  id: Key;
  label: string;
  parentId?: Key;
  data: T;
};

iNode 更新

使用此格式从更新函数返回 .

export interface iNodeUpdate {
  success: boolean;
  ErrorText?: string;
}

处理点击

在节点上点击上下文菜单将导致显示上下文菜单,同时显示"Add","Rename"和"Delete"选项.

点击扩展器将扩展或关闭节点的滑板

点击名称将选择该项目

点击复选框将选择该项目及其所有后人.

单项选择

为了处理所选择的一个(只有一个)项目,建议使用这些基本选项

  <TreeOfNodes<T>
    id={'...'}
    nodeList={[...]}
    roots={[...]}
    selected={selected}
    handleSelect={async (i) => {
      setSelected([i]);
    }}
  />

多项选择

为了处理多个选择,建议使用这些基本选项

  <TreeOfNodes<T>
    id={'...'}
    nodeList={[...]}
    roots={[...]}
    showCheckBox
    selected={selected}
    handleSelect={async (i) => {
      if (Array.isArray(i)) {
        setSelected(
          selected.includes(i[0])
            ? selected.filter((s) => !i.includes(s))
            : [...selected, ...i.filter((n) => !selected.includes(n))],
        );
      } else {
        setSelected(
          selected.includes(i) ? selected.filter((s) => s !== i) : [...selected, i],
        );
      }
    }}
  />

版本与发布记录

@asup/tree-of-nodes 共发布 21 个版本,首次发布于 2022/11/07;过去 12 个月发布了 3 个版本。

版本发布日期距今
3.1.1latest2026/10/1326 天前
3.1.02025/12/0811 个月前
3.0.02025/12/0111 个月前
2.0.62025/06/151.4 年前
2.0.52025/06/141.4 年前
2.0.42025/06/141.4 年前

关于 @asup/tree-of-nodes 的常见问题

@asup/tree-of-nodes 是什么?

REACT 字型树视图组件

如何安装 @asup/tree-of-nodes?

在项目目录运行 npm install @asup/tree-of-nodes,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:react(^19.0.0)、react-dom(^19.0.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@asup/tree-of-nodes 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@asup/tree-of-nodes 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@asup/tree-of-nodes 可以商用吗?

@asup/tree-of-nodes 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@asup/tree-of-nodes 的下载量有多少?

根据 npm 官方下载统计,@asup/tree-of-nodes 在 2026/10/07 – 2026/11/05 这 30 天内被下载 1,795 次,日均约 60 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@asup/tree-of-nodes 还在维护吗?

最新版本 3.1.1 发布于 2026/10/13(26 天前);至今共发布 21 个版本,其中过去 12 个月发布了 3 个;首次发布于 2022/11/07。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。