玩转 Vue 3 全家桶
大圣
前百度前端架构师
38321 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 44 讲
玩转 Vue 3 全家桶
15
15
1.0x
00:00/00:00
登录|注册

24|树:如何设计一个树形组件?

思维导图
生物分类
文件夹管理
后台管理系统的菜单管理
如何对渲染1000个节点的树形节点进行性能优化
注册el-node-content组件
使用render-content属性
处理节点的点击和复选框切换
渲染树形组件的各个部分
使用provide和watchEffect
提供数据给TreeNode.vue
在前端开发中的重要性
常见应用场景
可以无限层级
性能优化
支持树节点的自定义渲染
Tree、TreeNode、NodeContent三个组件的实现
递归组件的形式实现树形节点的无限嵌套
树形组件的设计需求
自定义节点内容
TreeNode.vue
Tree.vue
递归算法题示例:invertTree
树形结构适合递归
递归的概念
树形组件的主要特点
思考题
总结
组件实现
递归组件
组件功能分析
树形组件设计与实现

该思维导图由 AI 生成,仅供参考

你好,我是大圣。
上一讲,我们一起学习了弹窗组件的设计与实现,这类组件的主要特点是需要渲染在最外层 body 标签之内,并且还需要支持 JavaScript 动态创建和调用组件。相信学完上一讲,你不但会对弹窗类组件的实现加深理解,也会对 TDD 模式更有心得。
除了弹窗组件,树形组件我们在前端开发中经常用到,所以今天我就跟你聊一下树形组件的设计思路跟实现细节。

组件功能分析

我们进入Element3 的 Tree 组件文档页面,现在我们对 Vue 的组件如何设计和实现已经很熟悉了,我重点挑跟之前组件设计不同的地方为你讲解。
在设计新组件的时候,我们需要重点考虑的就是树形组件和之前我们之前的 Container、Button、Notification 有什么区别。树形组件的主要特点是可以无限层级、这种需求在日常工作和生活中其实很常见,比如后台管理系统的菜单管理、文件夹管理、生物分类、思维导图等等。
根据上图所示,我们可以先拆解出树形组件的功能需求。
首先,树形组件的节点可以无限展开,父节点可以展开和收起节点,并且每一个节点有一个复选框,可以切换当前节点和所有子节点的选择状态。另外,同一级所有节点选中的时候,父节点也能自动选中。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了如何设计和实现树形组件。树形组件是前端开发中常见的组件,具有无限层级的特点,常用于后台管理系统的菜单管理、文件夹管理等场景。文章首先分析了树形组件的功能需求,包括节点展开收起、复选框选择、父节点自动选中等。接着介绍了递归组件的设计思路,指出树形结构天然适合递归,通过算法题展示了递归的核心逻辑和终止条件。最后,以Element3的Tree组件使用方式和递归算法为例,展示了树形组件的实现细节。通过本文,读者可以了解树形组件的设计思路和递归算法的应用,对前端开发中树形结构的处理有更深入的理解。 文章详细介绍了树形组件的设计和实现过程,包括Tree组件的容器设计、TreeNode组件的渲染、自定义渲染内容等。同时,还提到了对树形节点进行性能优化的思考题,引发读者思考和讨论。整体而言,本文内容涵盖了树形组件的设计、实现和优化,对前端开发人员具有一定的指导意义。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《玩转 Vue 3 全家桶》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(13)

  • 最新
  • 精选
  • 一个自闭的人
    element3源码阅读和分析 -.-|||

    作者回复: 你好,这一讲主要是演示和剖析element3源码,后面会有ts组件库的加餐的

    2021-12-15
    9
  • KLonILo
    最近几讲,我得0.75倍速还得停下来自己看几遍还看不懂,听个大概吧

    作者回复: 可以辅助一下github上的代码看下Element3的代码

    2021-12-23
    2
    3
  • 把西红柿变成番茄_o
    这几节完了啊,对于新手全听不懂,对于高手估计都会了吧,有点尴尬

    编辑回复: 可以具体说说你疑惑的问题不~

    2022-01-25
    1
  • 在引入一个组件后, node_moudules 报错, 比如vue3.0引入element-plus后会报一些 类似这样的错误:Uncaught Error: Cannot find module 'vue' at webpackMissingModule (app.js:formatted:2896) at Module../src/main.js; 网上找了一遍也没找到能的解决方法, 遇到这种情况, 应该从哪些方面入手呢, 直接调试node_modules吗?

    作者回复: 我没咋用过element-plus,不过碰见node_modules报错的,首先要做的就是去github 提issue,重要bug维护者会优先修复发版,如果不行的话,就把这个框架从github fork一份到本地,通过npm link的方式维护 直接调试node_modules不是特别建议,哪怕现在解决了问题,也需要吧代码维护到git里,并且后续作者修复了还没法合并

    2021-12-17
    1
  • Hurrah! 🔥
    请问,这个部分代码在哪里?

    作者回复: 你好,Tree的代码在这里 https://github.com/hug-sun/element3/blob/master/packages/element3/packages/tree/Tree.vue

    2022-01-11
  • ll
    关于思考题: 节点渲染的逻辑 v-for=“child in tree.root.childNode”,如果 childNode 的 length, 这里假设 n=10000。这就是渲染问题的产生的原因,因为 n 的数量不 “合理”,什么是合理的 n,显示区域中能容纳 childNode 的数量就是 n 的合理数量。 解决方案: 1. v-for=“child in deQue”, 这里deQue是个“双端队列”,容量 n 共通过 显示高度/treeNode 高度算出。 2. 通过监听显示区域的 “scroll position” 操作进出 deQue 的数据节点。 大概就是这么个思路。
    2022-01-18
    3
  • Geek_d9cd5a
    大圣老师,能不能加个餐,讲一下虚拟列表
    2022-01-05
    3
  • 海阔天空
    树形组件在实际项目中懒加载的模式用得比较多。teree-node 内部定制 tree-node-content 组件基本上可以满足我们对树的操作了。
    2021-12-15
    1
  • 聂旋
    “这个时候我们节点需要支持内容的自定义,然后我们注册了 el-node-content 组件。” 请问这句话啥意思?能不能写的有逻辑一点!
    2024-01-15归属地:陕西
  • 俊俊大魔王
    太快了,感觉跟不上,不知道是我悟性不够,还是知识太难。
    2023-12-19归属地:上海
    1
收起评论
显示
设置
留言
13
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部