大B
大B
  • 发布:2025-04-30 14:51
  • 更新:2025-04-30 14:52
  • 阅读:52

【报Bug】v-if 用在 slot 上,在小程序下会触发 onMounted,和 H5 上不触发的表现不一致

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Mac

PC开发环境操作系统版本号: 15.1

手机系统: 全部

手机厂商: 华为

页面类型: vue

vue版本: vue3

打包方式: 离线

项目创建方式: CLI

CLI版本号: 3.0.0-4040520250104002

测试过的手机:

x6 iphone 12 pro max

示例代码:

console-mounted.vue

<template>  
  <view>console mounted</view>  
</template>  

<script lang="ts" setup>  
import {  
  onMounted  
} from 'vue';  

onMounted(() => {  
  console.info('onMounted');  
});  
</script>

with-slots.vue

<template>  
  <slot v-if="value === 0" />  
  <slot v-if="value === 1" name="s1">111</slot>  
  <slot v-if="value === 2" name="s2">222</slot>  
  <slot v-if="value === 3" name="s3">333</slot>  
</template>  

<script lang="ts" setup>  
interface IProps {  
  value?: 0 | 1 | 2 | 3;  
}  

defineProps<IProps>();  
</script>

if-demo.vue

<template>  
  <ConsoleMounted v-if="false" />  
  <WithSlots :value="1">  
    <ConsoleMounted />  
  </WithSlots>  
  <WithSlots :value="2">  
    <ConsoleMounted />  
  </WithSlots>  
  <WithSlots :value="3">  
    <ConsoleMounted />  
  </WithSlots>  
</template>  

<script lang="ts" setup>  
import WithSlots from './with-slots.vue';  
import ConsoleMounted from './console-mounted.vue';  
</script>

操作步骤:
  1. 一个被 slot 的组件 console-mounted.vue
  2. 一个带 slots 的组件 with-slots.vue
  3. 一个测试页面 id-demo.vue

预期结果:

onMounted 不会在控制台打印执行

实际结果:

onMounted 却被打印出来

bug描述:

v-if 若为 false,slot 的内容不应被 mount,但小程序下它 mount 了,且触发了 onMouted(界面未渲染)

2025-04-30 14:51 负责人:无 分享
已邀请:
大B

大B (作者) - 支新杰

有没有临时修改 node_modules 的解决方案,这个影响代码程度挺大的。

要回复问题请先登录注册