目录
2022-08-18 兼容性更新
发现不少同学在使用过程中未安装babel插件导致jsx无法解析的问题,基于上述原因,现在移除了babel插件,已升级到v1.0.9版本,不会出现类似如下报错
(图片来自某位同学的报错截图)
向前兼容旧版本。
源
由于业务开发过程中有树形数据,因此需要用到tree树形组件,鉴于项目是基于vue的,前期的ui组件库选型就是element-ui,于是采用了el-tree组件。但在实际使用过程中出现了几个意外。
卡顿假死
server端返回全部数据时,渲染全量的tree组件时前端直接卡死,排查发现业务数据大部分子节点的量级在万以上。页面卡死这种事是要直接“掉脑袋”的,马上换成懒加载模式。
改成懒加载模式后,前两层节点的渲染和展开明显改善,用户体验也正常了,但是逐层点开测试时,发现还是存在问题,第三层有些节点超过2万节点,点击渲染仍然没有解决问题,查了下element-ui的issue,发现有不少人存在这个问题,且element-ui维护者尚未解决此问题,只能自己解决这个问题了。
预研
首先搜集了下github上现有的虚拟滚动tree组件,发现大部分都没有提供完善的功能,如checkbox、懒加载、节点过滤、节点拖拽等功能。基于业务开发角度,element-ui的功能是比较齐全的,因此想法是基于el-tree融合虚拟滚动vue-virtual-scroller(github上最多星的虚拟滚动组件)开发一个多功能虚拟滚动tree组件。
开发
将el-tree的相关scss样式文件和js文件从element-ui包中抽取出来,重新组合后形成无虚拟滚动功能的完整tree组件。
vue-virtual-scroller需要设置virtual-scrol