Vue3 Transition 踩坑记

前言

系列首发于公众号[『前端进阶圈』],若不想错过更多精彩内容,请“星标”一下,敬请关注公众号最新消息。

Vue3 Transition 踩坑记

背景

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

上代码

<template>
    <!-- 错误写法 -->
    <Transition><!-- xxxx --></Transition>
</template>

<script setup></script>
  • 上述代码错误信息:

  • 有趣的是,官方文档 中并没有提到 Transition 子元素不能包含注释。

踩坑历程

  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. 第二步:查看源码 warnTransitionChildren.ts

    • 编译前
    • 编译后
    • 查看源码得知,Transition 组件内必须包含 一个元素只有一个根元素的组件 且不能是注释, 才能通过运行时编译。
  3. 第三步:尝试修改。在 Transition 组件里包含一个元素,发现它通过了。

  4. 第四步: 看单测源码 warnTransitionChildren.spec.ts,对于喜欢深入了解的同学可以看一下。

总结

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

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

特殊字符描述:

  1. 问题标注 Q:(question)
  2. 答案标注 R:(result)
  3. 注意事项标准:A:(attention matters)
  4. 详情描述标注:D:(detail info)
  5. 总结标注:S:(summary)
  6. 分析标注:Ana:(analysis)
  7. 提示标注:T:(tips)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Immerse_001

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值