vue.js - "Default Apollo Queries"VS "AsyncData"(Nuxt.js)

标签 vue.js async-await graphql nuxt.js vue-apollo

我正在使用 Nuxt/Vue 构建一个站点,它使用的是 GraphQL 后端 API。我们使用 Nuxt 的 Apollo 模块访问它。
在页面组件中,您可以这样做(我认为这称为智能查询,但我不确定):

apollo: {
  pages: {
    query: pagesQuery,
      update(data) {
        return _get(data, "pageBy", {});
      }
    },
  }
}
但是您也可以使用 Nuxt asyncData 钩子(Hook)进行这样的查询:
asyncData(context) {
  let client = context.app.apolloProvider.defaultClient;
  client.query({query, variables})
        .then(({ data }) => {
          // do what you want with data
        });
  }
}
我不确定这两种方式有什么区别,哪种更好。有人知道吗?我在任何地方的文档中都找不到解释。

最佳答案

是的,好问题。您在顶部显示的代码确实称为智能查询。实际上

Each query declared in the apollo definition (that is, which doesn't start with a $ char) in a component results in the creation of a smart query object.



使用 @nuxtjs/apollo 模块的 nuxt 项目可以开箱即用地使用这些。智能查询的美妙之处在于它附带的选项,其中之一是“预取”选项。听起来,这允许预取并且默认设置为 true。它还可以接受变量对象或函数。您可以查看文档 here .

这意味着智能查询或 asyncData 查询的结果将基本相同。它们应该在同一时间范围内得到解决。

那么为什么要选择其中一个呢?这可能取决于偏好,但使用智能查询允许的所有选项,您可以做更多事情,并且您可以包含在 asyncData 中可能无法实现的订阅。

更多关于智能查询 here .

关于vue.js - "Default Apollo Queries"VS "AsyncData"(Nuxt.js),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55885337/

相关文章:

node.js - GraphQL 中继返回一条记录

c# - 在 C# 中使用 async with void return for fire and forget

async-await - Web API - ConfigureAwait(true) 没有像我想的那样工作

graphql - 使用 NestJS TestingModule、GraphQL 代码优先和 TypeOrm 进行 e2e 测试的问题

vue.js - 无法解码下载的字体。 OTS 解析错误。浏览器

vue.js - 如何修复@vue/cli 漏洞?

javascript - 我们应该使用 SSG 来部署使用 Nuxt.js 创建的仪表板吗?

javascript - 从 select 中检索选定的文本

JavaScript 并行调用多个异步调用

node.js - 错误: Directive constraint in Graphql yoga when using constraints