由于InMemoryCache的性能问题,我试图将我们的应用迁移到爱马仕缓存。因为在我将缓存更改为使用writeData
之前,它是通过writeFragment
完成缓存初始化的。
所以init函数看起来像:
const initCache = cache => {
let fragmentString = gql`
fragment test on MyType {
...myTypeFragment
}
${fragments.myTypeFragment}
`;
let fragment = {
id: "myType",
fragment: fragmentString,
fragmentName: "test"
data: {
__typename: "MyType",
...
}
};
cache.writeFragment(fragment);
使用的片段是片段集合的一部分,并具有以下结构:
const fragments = {
myType: gql`
fragment myTypeFragment on myType {
__typename,
...
`,
...
}
使用Apollo开发工具,我可以看到在缓存中创建了以下条目:
"ROOT_QUERY": {
"data": {
"myType": null
}
}
"myType": {
"data": {
"__typename": "MyType",
...
}
}
myType
条目看起来不错,但是ROOT_QUERY
条目始终为null
。他们之间似乎也没有任何参考。
预期行为:
使用
const data = useQuery(GET_MY_TYPE, { onCompleted: data => console.log(Data) });
使用
const GET_MY_TYPE = gql`
query getMyType {
myType @client {
...myTypeFragment
}
}
${fragments.myTypeFragment}
`;
我希望看到一条日志消息,其中包含来自缓存中myType
条目的数据。在GraphiQL中执行此查询也应产生此结果
实际行为:
相反,永远不会调用onCompleted
。在GraphiQL中执行查询会返回
{
"data": {
"myType": null
}
}
系统信息