如果我们在apollo客户端状态缓存中有待办事项,例如对象数组-待办事项:[{name:'First',id:1},{name:'Second',id:2}]。有没有一种方法可以通过id仅查询我们需要的对象。就像重新选择-Redux中的选择器。我想通过ID进行订阅。
Apollo使您可以使用@client指令进行本地状态管理。因此,您可以按照以下方式创建查询,以根据ID获得单个TODO。
query getTodoById(id: ID!) @client {
todo {
name,
id
}
}
mutation setTodoById(id: ID!, todo: Todo!) @client {
todo {
name,
id
}
}
现在,您需要为上述查询创建自定义客户端解析器,以使Apollo知道应在哪里查找缓存中的数据。自定义解析器将使用名为getCachedKey
的参数,该参数基于typename
和Id
生成对象的密钥。 Apollo使用从自定义解析器生成的ID来查找缓存(待办事项列表)中的数据。
您的自定义客户端解析器应如下所示:
cacheRedirects: {
Query: {
todo: (_, args, { getCacheKey }) =>
getCacheKey({ __typename: 'Todo', id: args.id })
},
};