Vue3的template陷阱,一个没写指令的 <template>把按钮吞了
会显示出[立即开通]按钮吗?
<template>
<div>
<el-tooltip
class="box-item"
effect="dark"
content="Top Left prompts info"
placement="top-start"
>
<template>
<el-button v-if="[100,200].includes(status)">立即开通</el-button>
</template>
</el-tooltip>
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue';
const status = ref(100);
</script>
会显示出[立即开通]按钮吗?
思考5秒后,
有的小伙伴会说:可以显示出来,有的小伙伴会说:不能显示出来。
其实,不能显示出来的。
不能显示出来的原因
在 Vue 3 里,
<template> 只有带了指令(v-if /v-else/v-else-if/v-for/v-slot )才会被编译器消掉;
没有任何指令的<template> 会被渲染成原生 HTML<template> 元素 。
而原生 template 的内容是惰性的(放进content 文档片段,不显示在页面上)。
所以,[立即开通]按钮不会显示出来。
特别说明:消掉是指:编译后不产生任何 DOM 节点
HTML中是否有原生template元素?
有的。
HTML 中确实原生的 <template> 元素。
它是一个标准的、被现代浏览器广泛支持的 HTML 元素。
专门用于存放不立即渲染的 HTML 代码片段
原生template元素的核心特征
1,不渲染:template 的内容是惰性的,(放进content 文档片段,不显示在页面上)
2,无副作用:其中的脚本不会执行,图片不会加载,音视频也不会播放
没有任何指令的template会被渲染成原生template元素
证明:
没有任何指令的<template> 会被渲染成原生 HTML<template> 元素 。
而原生 template 的内容是惰性的(放进里面的文档片段,不显示在页面上)。
<template>
<div>
<div>
<h1>没有任何指令的 `template` 会被渲染成原生template标签</h1>
<template>
<el-button>立即开通</el-button>
</template>
</div>
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue';
const status = ref(100);
</script>

el-tooltip下面没有唯一的子节点会在控制台打一条警告
el-tooltip 会因为 没有唯一子节点在控制台打一条ElOnlyChild 警告
<template>
<div>
<el-tooltip
class="box-item"
effect="dark"
content="Top Left prompts info"
placement="top-start"
>
<template v-if="false">
<el-button >立即开通</el-button>
</template>
</el-tooltip>
</div>
</template>

尾声
今年被AI给震惊到了。
下半年也在开始频繁使用AI工具了。
对于同一个问题:可以给不同的AI工具回答。
这样你才知道哪一个AI回答的更好。
不要只使用某一个AI工具。
就比如:这篇笔记我使用了3个AI工具(deepseek、trae、workbuddy)。
我发现 trae 回答的要更好一些。
遇见问题,这是你成长的机会,如果你能够解决,这就是收获。
出处:https://www.cnblogs.com/IwishIcould/
想问问题,打赏了卑微的博主,求求你备注一下的扣扣或者微信;这样我好联系你;(っ•̀ω•́)っ✎⁾⁾!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,或者关注博主,在此感谢!
万水千山总是情,打赏5毛买辣条行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主(っ•̀ω•́)っ✎⁾⁾!
想问问题,打赏了卑微的博主,求求你备注一下的扣扣或者微信;这样我好联系你;(っ•̀ω•́)っ✎⁾⁾!
如果文中有什么错误,欢迎指出。以免更多的人被误导。

浙公网安备 33010602011771号