Nuxt 3 中的 useFetch 在组件里怎么用才不会报错?
我刚学 Nuxt 3,想在组件里用 useFetch 获取数据,但一刷新页面就报错说“Cannot read property ‘url’ of undefined”。是我写法不对吗?
我试过把 useFetch 放在 setup 里,也试过直接在 script setup 顶层调用,都不行。下面是我的代码:
<script setup>
const { data } = useFetch('/api/user')
</script>
<template>
<div>{{ data?.name }}</div>
</template>
两个解决办法:
办法一:把数据请求放到页面组件里(推荐)
Nuxt 3 的数据获取应该在 pages 目录下的页面文件中进行:
然后在 app.vue 里只负责展示:
办法二:非要在组件里用,加 lazy 选项
lazy: true 的作用是让 useFetch 不阻塞组件渲染,但这个组件也必须被页面引用,不能直接在 app.vue 里裸着用。
说白了,useFetch 是给 pages 用的,不是给普通组件用的。你要获取数据就在页面里 fetch,然后通过 props 传给子组件。
或者在 nuxt.config.ts 里把 ssr:false 关了,但这样SEO会炸,懒人不推荐。