编写Markdown时如何爽爽地渲染树组件?

在使用VitePress/Dumi等静态网站生成时,一般均支持直接在Markdown中渲染显示Vue/React组件,这给个网站非常丰富极致的表现力,我们在创建静态网站时开心的使用各种Vue/React组件,但是在输出树结构时,实际场景中存在几个问题:

  • 现有的树组件一般均属于某个UI套件的一部分,比较重
  • 树组件的数据一般使用JSON进行描述,冗余很多, 对于在网站输出场景比较交麻烦.

因此,隆重推荐LiteTree这个适用于React/Vue的树组件,专用MarkDown场景准备,具有:

  • 轻量小巧,无任何外部依赖
  • 采用Lite格式描述树,采用类似YAML的缩进来表示层级,数据简洁
  • 支持标识,样式定制,注释,图标等丰富的表现形式

访问官网

快速使用

LiteTree包含@lite-tree/react@lite-tree/vue两个版本,分别在ReactVue中使用,两者的使用方式基本相同。下面以VitePress为例进行说明。

第1步:安装

ts 复制代码
npm install @lite-tree/vue
// or
yarn add @lite-tree/vue
// or
pnpm add @lite-tree/vue

第2步:注册组件

@lite-tree/vueVitePress中使用有两种方式:

  • 按需引入
  • 全局引入

一般建议将LiteTree注册为全局组件,以便在任何地方都可以使用。

ts 复制代码
// .vitepress/theme/index.js
import DefaultTheme from 'vitepress/theme'
import { LiteTree } from '@lite-tree/vue'

/** @type {import('vitepress').Theme} */
export default {
  extends: DefaultTheme,
  enhanceApp({ app }) {
    // 注册自定义全局组件
    app.component('LiteTree',LiteTree)
  }
}

接下需要在.vitepress/config.mts中配置Vue参数,如下:

ts 复制代码
// .vitepress/config.mts
export default defineConfig({
 // ...
  vue:{
    template: {                      
      compilerOptions: {
        whitespace: 'preserve'      // [!code ++]
      }
    }
  }
})

重点 :设置whitespace: 'preserve'是为了保留Markdown中的空格,以便LiteTree可以正确解析lite格式的树数据。

第3步:使用

由于上面将LiteTree注册为全局组件,因此接下来在任何markdown文件都可以直接使用<LiteTree>组件。

lite-tree支持使用jsonlite两种格式来声明树数据。

lite是一种使用缩进来代表层级的简化格式,每4个空格代表一个树层级,适合在Markdown文档中使用。

下面是一个简单的例子(使用4个空格代表树的一个层缩进):

md 复制代码
<LiteTree>
- A公司
    行政中心
        总裁办              //   {color:red}important
        人力资源部
        财务部              //+
        行政部              //+
        法务部
        审计部              //-
        信息中心            //-
    + 市场中心
        市场部
        销售部
        客服部
        品牌部
        市场策划部
        市场营销部
    研发中心
        移动研发部(java,python,go)    //!
        平台研发部
        测试部              //*
        运维部              //*
        产品部
        设计部
</LiteTree>

可以看到lite格式比起jsonul/li格式更加简洁,适合在Markdown文档中使用。

渲染效果如下:

说明:

  • 可以看到lite格式非常简洁,只需要通过缩进TAB来代表缩进即可,默认情况下,每4个空格代表一个树层级,一个TAB等于4个空格。

  • 默认情况下,前置-号来表示节点展开状态,+号表示节点关闭状态。

访问官网了解更多细节

推荐

相关推荐
李明卫杭州43 分钟前
Vue3 Suspense 组件详解:从入门到避坑指南
vue.js
我是大卫1 小时前
【图】React源码解析-第四部分:事件与跨层传递
react.js·源码
张元清2 小时前
React useReducedMotion Hook:尊重 prefers-reduced-motion(2026)
javascript·react.js
用户298698530144 小时前
前端 Excel 处理进阶:React 中合并与取消合并单元格的实现
前端·javascript·react.js
老王以为4 小时前
Fiber 节点 —— 一个数据结构如何承载整个 React 运行时
前端·react native·react.js
gis开发之家4 小时前
vue3组合式函数(Composables)的艺术——将业务逻辑从UI组件中连根拔起
前端·javascript·vue.js·前端框架·vue3·前端工程化·前端架构
uuai4 小时前
vue导出pdf
前端·vue.js·pdf
mONESY4 小时前
ReAct 智能体循环与 JavaScript 异步并发原理深度解析
react.js
Cobyte5 小时前
17.响应式系统比对:链表如何实现响应式系统的高效更新
前端·javascript·vue.js