2.10.0
EN
Skip to content

Folder 文件夹 ​

文件树组件,用于展示层级文件结构。对齐 React @ant-design/x Folder(2.4+,含 2.8 右键菜单)。

何时使用 ​

  • 展示文件/文件夹层级结构
  • 需要文件选择、展开收起、预览与右键菜单
  • 需要在目录树与预览区之间拖拽调整宽度

代码演示 ​

基础用法 ​

Project Files
src
App.vue
main.ts
package.json
App.vue
<script setup lang="ts">
const msg = 'Hello Folder';
</script>

<template>
  <div>{{ msg }}</div>
</template>
基础用法

展示文件树与内联内容预览。目录树与预览区之间可拖拽分隔条调整宽度。

自定义文件服务 ​

remote
a.ts
b.ts
自定义文件服务

通过 fileContentService 动态加载文件内容。

受控文件选择 ​

docs
guide.md
api.md
guide.md
# Guide
Controlled selection.
受控文件选择

使用 selectedFile / onSelectedFileChange 受控选中文件。

自定义图标 ​

📁pages
index.html
readme.md
readme.md
# Pages
自定义图标

通过 directoryIcons 自定义目录与扩展名图标;设为 false 可隐藏图标。

右键菜单 ​

Right-click any file or folder
my-project
src
App.vue
README.md
App.vue
<template><div>Hello</div></template>
右键菜单

支持全局 contextMenu 与节点级覆盖(含 false 禁用)。可配合 ref 的 updateNode / deleteNode / addNode 做不可变更新。

自定义预览 ​

notes.txt
notes.txt
custom preview · lang=txt
line1
line2
line3
自定义预览

通过 previewRender 自定义预览区内容。

API ​

FolderProps ​

属性说明类型默认值版本
treeData文件树数据FolderTreeData[][]-
selectable是否开启选择功能booleantrue-
selectedFile选中的文件路径(受控)string[]--
defaultSelectedFile默认选中的文件路径string[][]-
onSelectedFileChange文件选择变化时的回调(file: { path: string[]; title?: FolderTreeData['title']; content?: string }) => void--
directoryTreeWith目录树初始宽度(可拖拽分隔条调整)number | string278-
emptyRender空状态展示,设为 false 时不展示false | VNode | string | (() => VNode | string | null)--
previewRender自定义文件预览内容VNode | string | ((file, info) => VNode | string | null)--
expandedPaths展开的节点路径(受控)string[]--
defaultExpandedPaths默认展开的节点路径string[]--
defaultExpandAll是否默认展开所有节点booleantrue-
onExpandedPathsChange展开/收起变化回调(paths: string[]) => void--
fileContentService文件内容服务FileContentService--
onFileClick文件点击事件(filePath: string, content?: string) => void--
onFolderClick文件夹点击事件(folderPath: string) => void--
directoryTitle目录树标题,设为 false 时不展示false | VNode | string | (() => VNode | string | null)--
previewTitle文件预览标题false | VNode | string | (({ title, path, content }) => VNode | string | null)--
directoryIcons自定义图标,设为 false 时不展示false | Record<'directory' | string, VNode | string | (() => ...)>--
contextMenu右键菜单(全局),可被节点 contextMenu 覆盖MenuProps['items'] | ((node, key) => MenuProps['items'])--
onRightClick右键点击节点回调(info: { event, node }) => void--
classNames语义化 classNameRecord<SemanticType, string>--
styles语义化 styleRecord<SemanticType, CSSProperties>--

SemanticType:root | directoryTree | directoryTitle | filePreview | previewTitle | previewRender

FolderTreeData ​

属性说明类型默认值
title显示名称string | VNode-
path路径段string-
content文件内容(可选)string-
children子项FolderTreeData[]-
contextMenu节点右键菜单,false 禁用MenuProps['items'] | false | ((key) => ...)-

FileContentService ​

ts
interface FileContentService {
  loadFileContent(filePath: string): Promise<string>;
}

Ref 方法 ​

ts
const folderRef = ref<FolderRef>();

folderRef.value?.getNode(['src', 'App.tsx']);
folderRef.value?.updateNode(['src', 'App.tsx'], { title: 'Main.tsx', path: 'Main.tsx' });
folderRef.value?.deleteNode(['src', 'unused.ts']);
folderRef.value?.addNode(['src'], { title: 'new.ts', path: 'new.ts', content: '' });
方法说明类型
getNode根据路径获取节点(path: string[]) => FolderTreeData | undefined
updateNode不可变更新节点,返回新 treeData(path, data) => FolderTreeData[]
deleteNode不可变删除节点,返回新 treeData(path) => FolderTreeData[]
addNode不可变新增子节点,返回新 treeData(parentPath, node) => FolderTreeData[]

语义化结构 ​

:::semantic

folder

:::