我是Apollo和Apollo缓存的新手。我一直在写demo project,遇到了两个问题:
- 无法使
cacheRedirects
正常工作:
在我的演示中,我“全部加载” COVID19测试数据,该数据查询API并返回3个国家(包括加拿大)的结果数组。然后,我尝试加载单个结果(“加载加拿大”)以使其使用我的cacheRedirects
解析器。我想我已经正确设置了此设置,但是它总是返回到API进行查询,而不是从缓存中读取。
这是我的带有缓存的Apollo客户端:
const client = new ApolloClient({
uri: "https://covid19-graphql.now.sh",cache: new InmemoryCache({
dataIdFromObject: obj => {
console.log("in cache: obj:",obj);
let dataId = null;
switch (obj.__typename) {
case "Country":
dataId = obj.__typename + "_" + obj.name;
break;
default:
dataId = defaultDataIdFromObject(obj);
}
console.log("in cache: dataId:",dataId);
return dataId;
},cacheRedirects: {
Query: {
country: (_,args,{ getcacheKey }) => {
console.log("in cacheRedirects:",_,args);
const cacheKey = getcacheKey({ __typename: "Country",...args });
console.log("cacheKey:",cacheKey);
return cacheKey;
}
}
}
})
// connectToDevTools: true
});
- 我不知道如何执行
readFragment
:
我在这段代码中尝试了许多不同的配置,但是我没有得到任何结果。
这是我的职能:
const ReadFragment = () => {
console.log("in ReadFragment");
try {
const data = client.readFragment({
id: GET_DATA.countryData,fragment: gql`
fragment mostRecent on country {
id
text
complete
}
`
});
if (data) {
console.log(data);
return (
<div>
From Fragment: {JSON.stringify(data)}
</div>
);
} else {
return <div>From Fragment: not found</div>;
}
} catch (error) {
// console.error(error);
return <div>From Fragment: not found</div>;
}
};
奖金问题:我似乎无法获得Apollo客户端开发人员工具扩展,无法在Chrome浏览器中使用。这仍然有效吗?我的代码似乎从未连接到它。 (取消注释connectToDevTools: true
。)似乎能够检查缓存的内容对于开发和学习非常有用。还有查看缓存内容的另一种方法吗?