Apollo readQuery,从缓存中获取数据

问题描述

我正在尝试从 Apollo 缓存中获取数据。我知道数据在那里是因为在 Apollo 开发工具中指定的记录可用。 在我的反应应用程序中,我进行了简单的单击并设置了稍后传递给查询的 Id。 client.readQuery(...) 的结果是 null。我在旋转,因为不知道为什么。我使用的代码与文档中的完全相同。

这是一个查询

export const RECRUIT_QUERY = gql`
  query Recruit($id: ID!) {
    Recruit(_id: $id) {
      _id
      firstName
    }
  }
`;

组件中 apollo 钩子的使用:

const client = useApolloClient();
const recruit = client.readQuery({
  query: RECRUIT_QUERY,variables: { id: selectedId }
})

apollo 的配置:

export const client = new ApolloClient({
  link: concat(
    authMiddleware,new HttpLink({
      uri: process.env.REACT_APP_API_URL,}),),cache: new InMemoryCache(),});

这是阿波罗商店预览:

enter image description here

解决方法

使用 readFragment 满足了我的期望。以前我尝试过这个解决方案但错误地,例如:

 client.readFragment({
   id: '4587d3c2-b3e7-4ade-8736-709dc69ad31b',fragment: RECRUIT_FRAGMENT,});

事实上,Appollo 商店找不到这条记录。正确的解决方案如下所示:

client.readFragment({
  id: 'Recruit:4587d3c2-b3e7-4ade-8736-709dc69ad31b',})