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

Nuxt3切换语言时如何用useAsyncData重新获取导航数据?

解决Nuxt3 + Prismic多语言导航栏数据不更新问题

你的问题核心是初始加载时只获取了对应语言的导航数据,切换语言时没有触发重新请求,导致新语言的链接数量无法更新。可以通过以下步骤修复:

1. 将语言标识转为响应式属性

把原来基于初始locale生成的lang改为响应式计算属性,确保它能随locale变化自动更新:

const { locale } = useI18n()
// 用computed包裹,让lang随locale变化而更新
const lang = computed(() => getPageLang(locale.value).lang)

2. 配置useAsyncData并监听语言变化

使用useAsyncData的refresh方法,在locale变化时重新获取导航数据:

// 初始化获取导航数据,key包含响应式lang,同时拿到refresh方法
const { data: navi, refresh } = await useAsyncData(
  // 动态生成key,确保不同语言的数据缓存独立
  () => `${PAGE_NAME.NAVI_NAVBAR}_${unref(lang)}`,
  // 请求时传入当前的lang值
  () => client.getByUID(PAGE_TYPE.NAVI, PAGE_NAME.NAVBAR, { lang: unref(lang) })
)

// 监听locale变化,触发数据刷新
watch(locale, () => {
  refresh()
})

关键说明

  • computed让lang成为响应式变量,保证语言切换时能同步更新Prismic请求的语言参数
  • refresh方法是Nuxt3提供的useAsyncData内置方法,会自动重新执行请求并更新navi数据,同时保留缓存机制
  • 动态生成的useAsyncData key能确保不同语言的导航数据被独立缓存,避免数据混淆

额外检查

  • 确认Prismic后台中,不同语言的导航文档UID保持一致(Prismic多语言文档默认共享UID,一般无需额外配置)
  • 验证getPageLang函数返回的语言代码与Prismic后台配置的语言标识完全匹配(比如en对应英文,zh-cn对应中文)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 03:32:45