You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nuxt 3中如何监听useAsyncData的pending状态?

问题原因

你在watch回调里注册onMounted钩子的方式完全错误:

  • onMounted是Vue的生命周期钩子,它只能在组件初始化的setup阶段被注册,并且只会在组件挂载完成时触发一次。
  • 当watch检测到pending变为false时,组件早已完成挂载流程,此时再注册onMounted,这个钩子永远不会被触发。
解决方案

直接在watch的回调中执行目标逻辑,不需要嵌套onMounted:

const { data: initialState, pending } = await useAsyncData('budgetInitialState', async () => {
    const initialState = await getInitialState()
    return initialState
})

watch(() => pending, async (newPending) => {
    if (!newPending) {
        // 直接执行你原本想放在onMounted里的代码
        console.log('数据加载完成,现在执行逻辑')
        // 这里可以放置异步操作或其他业务代码
    }
})

如果你的逻辑需要确保DOM已就绪(比如操作页面元素),可以结合nextTick来保证DOM更新完成:

import { nextTick } from 'vue'

const { data: initialState, pending } = await useAsyncData('budgetInitialState', async () => {
    const initialState = await getInitialState()
    return initialState
})

watch(() => pending, async (newPending) => {
    if (!newPending) {
        await nextTick()
        console.log('数据加载完成且DOM已更新')
        // 执行DOM相关操作
    }
})

内容的提问来源于stack exchange,提问作者Phillip

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 04:34:52