Apollo本地状态-如何通过ID查询

问题描述 投票:0回答:1

如果我们在apollo客户端状态缓存中有待办事项,例如对象数组-待办事项:[{name:'First',id:1},{name:'Second',id:2}]。有没有一种方法可以通过id仅查询我们需要的对象。就像重新选择-Redux中的选择器。我想通过ID进行订阅。

reactjs graphql react-apollo apollo-client
1个回答
1
投票

Apollo使您可以使用@client指令进行本地状态管理。因此,您可以按照以下方式创建查询,以根据ID获得单个TODO。

query getTodoById(id: ID!) @client {
  todo {
    name,
    id
  }
}

mutation setTodoById(id: ID!, todo: Todo!) @client {
  todo {
    name,
    id
  }
}

现在,您需要为上述查询创建自定义客户端解析器,以使Apollo知道应在哪里查找缓存中的数据。自定义解析器将使用名为getCachedKey的参数,该参数基于typenameId生成对象的密钥。 Apollo使用从自定义解析器生成的ID来查找缓存(待办事项列表)中的数据。

您的自定义客户端解析器应如下所示:

  cacheRedirects: {
    Query: {
      todo: (_, args, { getCacheKey }) =>
        getCacheKey({ __typename: 'Todo', id: args.id })
    },
  };

© www.soinside.com 2019 - 2024. All rights reserved.