【问题标题】:Apollo is not re-sending the query to the serverApollo 不会将查询重新发送到服务器
【发布时间】:2019-05-23 16:35:52
【问题描述】:

我使用 graphql 端点构建了一个 api 平台应用程序。在客户端,我使用这样的 apollo 客户端管理查询和突变(在 vuejs 前端):

import { ApolloClient } from 'apollo-client'
import { HttpLink } from 'apollo-link-http'
import { InMemoryCache } from 'apollo-cache-inmemory'

const httpLink = new HttpLink({
  uri: 'http://localhost:8000/api/graphql'
})

export default new ApolloClient({
  link: httpLink,
  cache: new InMemoryCache(),
  connectToDevTools: true
})

在我的 vuex 商店中,我是这样使用它的:

fetchItems({commit}, options) {
      commit(mutationsTypes.FETCHING_ITEMS);
      client.query({
        query: organismoQueries.SEARCH_ITEMS_QUERY(options),
      }).then((res) => {
        commit(mutationsTypes.FETCHING_ITEMS_SUCCESS, res.data.organismos.edges)
      }).catch(error => console.error(error));
    }

查询工作正常,问题是我无法重新加载表格结果。当我使用相同的选项重新发送相同的查询时,永远不会请求 graphql 端点。我需要更改表格的排序,但是一旦达到所有组合,我就无法再次重新加载表格。

我试图在查询中引入一个随机参数,但我从服务器收到错误(显然)。

有没有办法重新发送相同的查询并执行诸如重新加载表之类的操作。

提前致谢!

【问题讨论】:

    标签: vue.js apollo api-platform.com vue-apollo


    【解决方案1】:

    Apollo 客户端可以通过从服务器或缓存中获取特定查询来解析它。确切的行为由fetchPolicy 确定,可以在调用client.query 时指定。来自文档:

    获取策略是一个选项,它允许您指定您希望组件如何与 Apollo 数据缓存交互。默认情况下,您的组件将首先尝试从缓存中读取,如果您的查询的完整数据在缓存中,那么 Apollo 只会从缓存中返回数据。如果您查询的完整数据不在缓存中,那么 Apollo 将使用您的网络接口执行您的请求。通过更改此选项,您可以更改此行为。

    因为默认策略是cache-first,并且您已经获取了一次查询,后续对client.query 的调用将返回缓存的结果。要绕过缓存,请选择不同的策略,例如 network-only

    client.query({
      query: organismoQueries.SEARCH_ITEMS_QUERY(options),
      fetchPolicy: 'network-only',
    })
    

    您可以阅读有关fetchPolicy 选项in the docs 的更多信息。

    【讨论】:

      猜你喜欢
      • 2018-10-14
      • 2019-11-14
      • 2014-04-18
      • 1970-01-01
      • 2023-04-02
      • 2015-12-01
      • 2016-10-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多