来自组件的 NuxtJS asyncData

Posted

技术标签:

【中文标题】来自组件的 NuxtJS asyncData【英文标题】:NuxtJS asyncData from component 【发布时间】:2021-10-25 17:20:48 【问题描述】:

我尝试学习 nuxtjs,现在我在 asyncData。如果我理解正确,则在加载 asyncData 后处理从页面转换的加载。然后我有一个问题,如果我的 axios 请求不是在 asyncData 中,而是在一个组件中。我发现 AsyncData 在组件中不起作用,或者说转换不等待加载。如何在所有组件响应之前加载页面?

<template lang="pug">
  .main
    post-list(:posts="posts")
    ros-list(:posts="posts")
    gos-list(:posts="posts")
</template>

现在我有 3 个组件。在他们每个人都有 axios 请求,我怎么能告诉 nuxt 页面等待他们加载?

现在我正在使用 asyncData,但我无法将其传输到组件。

asyncData( params ) 
    return axios.get("***").then(post => 
        return post;

【问题讨论】:

你能分享完整的组件吗? 它不是组件它是一个页面,在组件中只是 axios 请求 这可行但相当复杂,因为它必须使用fetch 完成。你不能使用fetch()钩子并添加一些骨架吗? buefy.org/documentation/skeleton 【参考方案1】:

来自https://nuxtjs.org/docs/2.x/features/data-fetching

Nuxt 有两个用于异步数据加载的钩子

获取钩子(Nuxt 2.12+)。这个钩子可以放在任何组件上,并提供渲染加载状态(在客户端渲染期间)和错误的快捷方式。

asyncData 钩子。 此钩子只能放置在页面组件上。 与 fetch 不同,此钩子在客户端渲染期间不显示加载占位符:相反,此钩子会阻止路由导航,直到它被解决,显示页面错误如果失败。

我认为 Axios 文档指的是 Nuxt 的早期版本。 Fetch 挂钩已在 v 2.12 中引入

这是一篇很好的文章,解释了 fetch(有和没有 Axios)

https://nuxtjs.org/blog/understanding-how-fetch-works-in-nuxt-2-12

这是我在安装 nuxt 时的做法:


    async fetch () 
        const response = await this.$axios.$get('/api/v1/municipalities', 
            params: 
            // Url params as JSON
            name: this.mySearch
            other_param: this.otherStuff
          
        )
        // do stuff with the response
      

(我是 nuxt.js 的新手,但多年来第一次潜伏在 *** 上,我觉得很有用:D)

【讨论】:

以上是关于来自组件的 NuxtJS asyncData的主要内容,如果未能解决你的问题,请参考以下文章

nuxt.js中asyncData 方法能够在渲染组件之前异步获取数据

Nuxtjs 在 asyncData 中获取 Firestore 数据

Vue 2 和 NuxtJS - 来自父级的样式子组件

如何在 NuxtJS 的 asyncData 中使用 Promise

javascript nuxtjs asyncData解构覆盖

javascript nuxtjs asyncData用法