前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Vue3 Transition 踩坑记

Vue3 Transition 踩坑记

作者头像
Immerse
发布2024-03-13 14:58:22
1690
发布2024-03-13 14:58:22
举报
文章被收录于专栏:非同质前端札记

Vue3 Transition 踩坑记

背景

  • • 我本来想尝试新版本的特性,结果踩了个大坑。在这里分享一下我的经验,希望能让大家少走弯路

上代码

代码语言:javascript
复制
<template>
    <!-- 错误写法 -->
    <Transition><!-- xxxx --></Transition>
</template>

<script setup></script>
  • • 上述代码错误信息:
  • • 有趣的是,官方文档 中并没有提到 Transition 子元素不能包含注释。

踩坑历程

  1. 1. 第一步:看到 Cannot read properties of undefined (reading 'loc'),习惯性(Uncaught (in promise) ReferenceError: xxxxx is not defined) 地在本地 Transition.vue 页面中寻找 loc 变量,结果没有找到。然后我在全局查找,还是没有找到 loc 变量。(其实这一步是多余的,因为错误信息 [plugin:vite:vue] Cannot read properties of undefined (reading 'loc'),并不是由于本地文件没有 loc 变量导致的,而是因为源码内部插件报的错误。)
  2. 2. 第二步:查看源码 warnTransitionChildren.ts
    • • 编译前
    • • 编译后
    • • 查看源码得知,Transition 组件内必须包含 一个元素只有一个根元素的组件 且不能是注释, 才能通过运行时编译。
  3. 3. 第三步:尝试修改。在 Transition 组件里包含一个元素,发现它通过了。
  1. 4. 第四步: 看单测源码 warnTransitionChildren.spec.ts,对于喜欢深入了解的同学可以看一下。

总结

  1. 1. Transition 组件 子元素不能包含注释,这会导致无法通过运行时编译,导致组件不能正确渲染。(我踩了半小时的坑,不要跟我一样)
  2. 2. 模板编译中,Transition 子元素不允许多个组件或元素,否则编译不通过,根据单测源码得知,如果需要多个分支,可以使用 v-if, v-if-else 来确定具体分支。
  3. 3. Transition 子元素的组件中可以包含注释,但是不要包含太多,不然会影响渲染效率。

希望大家能从我的经验中获得一些收获,避免重复踩坑。

特殊字符描述

•问题标注 Q:(question)

•答案标注 R:(result)

•注意事项标准:A:(attention matters)

•详情描述标注:D:(detail info)

•总结标注:S:(summary)

•分析标注:Ana:(analysis)

•提示标注:T:(tips)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-04-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 非同质前端札记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Vue3 Transition 踩坑记
    • 背景
      • 上代码
        • 踩坑历程
          • 总结
            • 特殊字符描述
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档