Vue 3 迁移受阻,作者自研 Vue Pick 替代 vue-select 与 vue-treeselect
译注:本文编译自 dev.to 用户 szwn 的技术分享,原文标题为《Vue-Select and Vue-Treeselect never got a stable Vue 3 release, so we replaced them》,链接见文末。文中观点与方案均来自原作者,供正在做 Vue 3 迁移的开发者参考。
迁移顺利,唯独下拉组件卡住了
作者正在把一个大型应用从 Vue 2.7 迁移到 Vue 3。大部分代码都能顺利移植,但下拉选择组件成了例外。
该应用大量使用 vue-select 和 vue-treeselect。问题在于:
- vue-select 仅通过其 4.0 beta 版本支持 Vue 3,而最后一个 beta 发布于 2022 年 11 月;
- vue-treeselect 的最后一次发布是在 2019 年 10 月,且只支持 Vue 2。
也就是说,这两个库都无法跟随项目一起升级到 Vue 3。
现成的 fork 解决不了渐进迁移
这两个库都存在社区维护的 Vue 3 fork,但它们只支持 Vue 3。这意味着在正式切换之前,项目仍要在 Vue 2.7 上继续运行旧库,等到切换那天再一次性替换所有下拉组件——这种「大爆炸式」替换风险高、工作量大。
Vue Pick:一套 props,同时兼容 Vue 2.7 与 Vue 3
为此,作者编写了 Vue Pick。它是一个同时运行在 Vue 2.7 和 Vue 3 上、且使用相同 props 的组件。
这样一来,团队可以在仍处于 Vue 2.7 阶段时就先替换掉旧的下拉组件,等切换到 Vue 3 后它们依然可用。届时唯一需要改动的是导入路径:从 vue-pick/vue2 改为 vue-pick。
在功能上,Vue Pick 覆盖了原先使用那两个库的场景:
- 搜索
- 多选
- 带父子复选框的树形选择,包括从服务端加载子节点
此外,它没有任何运行时依赖,唯一需要的就是 Vue 本身。
适用人群
作者表示,如果开发者同样受困于 vue-select 和 vue-treeselect 这两个库,Vue Pick 或许能节省一些时间。
项目地址: