【问题标题】:apollo-link-state: How to write Query resolvers?apollo-link-state:如何编写查询解析器?
【发布时间】:2019-02-18 17:20:53
【问题描述】:

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

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

请帮忙

【问题讨论】:

    标签: javascript graphql react-apollo apollo-client


    【解决方案1】:

    只是想发布同样的问题 - 幸运的是刚刚想通了。 readQuery-Methode 只允许您从 root 查询。因此,您应该使用 readFragment,因为它允许您访问缓存中的任何规范化字段,只要您获得它的 id(类似这样的:GraphQlTypeName:0 通常由字段构造:id 和 __typename )。您的 Query-Resolver 应如下所示:

      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 });
      }
    }
    

    和来自阿波罗的电话如:

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

    【讨论】:

      猜你喜欢
      • 2018-08-30
      • 2018-11-03
      • 1970-01-01
      • 2019-09-12
      • 2019-02-13
      • 2023-03-13
      • 2018-06-19
      • 2018-11-10
      • 2019-07-15
      相关资源
      最近更新 更多