Vue3 Quasar组件中onActivated钩子无法触发问题求助
Vue 3.0.0中onActivated钩子不触发的解决方案
问题核心
onActivated 钩子仅会在被<keep-alive>包裹的组件从缓存中被激活时触发。你的代码存在两个关键缺失:
- 组件
MyComp未被<keep-alive>包裹,不会进入缓存机制 - 没有触发组件从缓存恢复的场景(比如组件切换、路由返回等)
修复方案
1. 用<keep-alive>包裹目标组件
修改Index.vue,将MyComp放入<keep-alive>标签内,同时添加组件切换逻辑来触发缓存激活:
<template> <keep-alive> <MyComp v-if="isShow" /> </keep-alive> <button @click="toggleShow">切换组件</button> </template> <script setup> import MyComp from "../components/MyComp.vue"; import { ref } from "vue"; const isShow = ref(true); const toggleShow = () => { isShow.value = !isShow.value; }; </script>
2. 验证触发逻辑
点击按钮切换组件显示状态:
- 首次渲染组件时,
onMounted会触发一次 - 当组件从隐藏(
isShow=false)变回显示(isShow=true)时,组件从缓存中恢复,onActivated会被触发,控制台会输出对应日志
如果是路由场景,可在路由出口处用<keep-alive>包裹组件,切换路由后返回时同样会触发onActivated钩子。
内容的提问来源于stack exchange,提问作者acroscene
相关产品推荐
相关产品推荐

