【发布时间】:2020-07-16 12:02:00
【问题描述】:
我将 Nuxt 更新到最新版本,因为他们引入了新的 fetch() 挂钩。
在我的项目中,我正在从 Prismic 检索数据。之前,我使用的是asyncData(),但是在导航时,需要一些时间才能渲染调用asyncData() 的页面(这是它的工作原理)。
理想的解决方案是在该特定页面上导航,并在检索数据时显示加载动画。
新的fetch() 钩子似乎很合适,因为它公开了$fetchState.pending 以检查操作的状态。
现在,代码(我正在从商店的类别中检索子类别):
data(){
return{
docs: []
}
},
async fetch() {
try{
const res = await this.$prismic.api.query(this.$prismic.predicates.at('my.category.uid', this.$route.params.sub))
const el = res.results[0]
const query = await this.$prismic.api.query([this.$prismic.predicates.at('document.type','sub-category'), this.$prismic.predicates.at('my.sub-category.category', el.id)], { orderings: '[my.sub-category.position, my.sub-category.title]' })
this.docs = query.results
}
catch (e) {
console.log(e)
}
}
这至少在客户端有效。这适用于正确的 SSR 吗?我的意思是,在asyncData()(在服务器端调用)中,this 不可访问,data() 也不可访问。如果这是正确的解决方案,那么不再使用 asyncData() 而不是 fetch() 有什么意义?
【问题讨论】:
-
您的问题已在文档中得到解答 nuxtjs.org/api/pages-fetch fetch 在呈现路线时在服务器端调用,在导航时在客户端调用。 至少,客户端
fetchOnServer: false? 这是否适用于正确的 SSR? 是的。 -
嗯,我确实想在服务器上获取,尤其是产品详细信息页面(用于 SEO)。我唯一的疑问是我不知道我编写的代码是否在服务器端也有效。此外,使用
asyncData的真正区别是什么?
标签: vue.js fetch nuxt.js server-side-rendering