javascript - Apollo 链接状态 : How to write Query resolvers?

标签 javascript graphql react-apollo apollo-client

我使用默认值创建状态链接,如下所示:

const stateLink = withClientState({
  cache,
  resolvers,
  defaults: {
    quote: {
      __typename: 'Quote',
      name: '',
      phoneNumber: '',
      email: '',
      items: []
    }
  }
})

所以我的缓存不应该是空的。现在我的 resolvers 映射如下所示:

resolvers = {
  Mutation: { ... },
  Query: {
    quote: (parent, args, { cache }) => {
      const query = gql`query getQuote {
        quote @client {
          name phoneNumber email items
        }
      }`

      const { quote } = cache.readQuery({ query, variables: {} })
      return ({ ...quote })
    }
  }
}

我的 resolversdatasource 是缓存吗?所以我必须以某种方式查询缓存。但这不起作用,我想这是因为我正在尝试响应 quote 查询,为此我正在制作另一个 quote 查询。

我认为我应该在不查询 quote 的情况下获取 quote 数据,但是如何呢?

我收到这个错误:

Can't find field **quote** on object (ROOT_QUERY) undefined

请帮忙

最佳答案

只是想发布同样的问题 - 幸运的是刚刚弄明白了。 readQuery-Methode 只允许您从根目录进行查询。因此,您应该使用 readFragment,因为它允许您访问缓存中的任何规范化字段,只要您获得它的 id(类似这样的东西:GraphQlTypeName:0 通常由以下字段构造:id 和 __typename)。你的查询解析器应该看起来像这样:

  protected resolvers = {
Query: {
  getProdConfig: (parent, args, { cache, getCacheKey }) => {
    const id = getCacheKey({ __typename: 'ProdConfig', id: args.id });
    const fragment = gql`fragment prodConfig on ProdConfig {
      id,
      apiKey,
      backupUrl,
      serverUrl,
      cache,
      valid
    }`;
    const data = cache.readFragment({ fragment, id })
    return ({ ...data });
  }
}

来自 apollo 的电话是这样的:

    let query = this.$apollo.query(`
  query prodConfig($id: Int!) {
    getProdConfig(id: $id) @client {
      apiKey,
      backupUrl,
      serverUrl,
      cache,
      valid
    }
  }`,
  { id: 0 }
);

关于javascript - Apollo 链接状态 : How to write Query resolvers?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52322754/

相关文章:

javascript - Chartjs,基于不等时间间隔绘制数据

java - 有没有办法将 GraphQL 查询字段分组为子/嵌套查询组?

javascript - 使用 Mocha 和 Node.js 对私有(private)函数进行单元测试

javascript - 如何更新在 bootstrap-vue 中单击的按钮

node.js - 如何修复 TypeError : Cannot read property 'hash' of undefined during hashing password for GraphQL mutation with bcryptjs?

reactjs - Apollo 的 proxy.writeQueries 清空缓存(是否有错误?)

apollo - Apollo 中的嵌套查询缓存重定向

networking - 如何在全局范围内知道 ApolloClient 中所有查询的 networkStatus?

javascript - 图表的外部样式

java - 使用 SPQR 进行分页的推荐方法是什么?