使用 client.readFragment() 从 Apollo 缓存中读取片段
Reading a Fragment from the Apollo Cache with client.readFragment()
成功执行查询后,我可以使用 Apollo Dev Tools 看到以下内容(附图)。
但是,我无法直接使用 ID(例如 2025)查询 filter
对象。我得到的是 Uncaught Invariant Violation: Can't find field filters on ROOT_QUERY object
.
以下是我尝试查询的方式:
client.cache.readQuery({
query: gql`
query Filter {
filters {
key
value
}
}
`
});
我也试过如下片段:
client.readFragment({
id: '2025',
fragment: gql`
fragment filter on filters {
id
key
value
}
`
});
但这给了我空。
您需要用__typename
和您要从缓存中查询的id来指定对象。请注意,filters
对象的 ID 在 Apollo Cache 中是 filters:[id]
,这是您访问缓存中该片段所需使用的格式,[__typename]:[key]
。您可以在 docs.
中阅读有关分配缓存标识符的更多信息
您使用以下方式访问您的片段:
const filter = client.readFragment({
fragment: gql`
fragment filter on filters {
id
key
value
}
`,
fragmentName: 'filter',
id: 'filter:2025'
})
成功执行查询后,我可以使用 Apollo Dev Tools 看到以下内容(附图)。
但是,我无法直接使用 ID(例如 2025)查询 filter
对象。我得到的是 Uncaught Invariant Violation: Can't find field filters on ROOT_QUERY object
.
以下是我尝试查询的方式:
client.cache.readQuery({
query: gql`
query Filter {
filters {
key
value
}
}
`
});
我也试过如下片段:
client.readFragment({
id: '2025',
fragment: gql`
fragment filter on filters {
id
key
value
}
`
});
但这给了我空。
您需要用__typename
和您要从缓存中查询的id来指定对象。请注意,filters
对象的 ID 在 Apollo Cache 中是 filters:[id]
,这是您访问缓存中该片段所需使用的格式,[__typename]:[key]
。您可以在 docs.
您使用以下方式访问您的片段:
const filter = client.readFragment({
fragment: gql`
fragment filter on filters {
id
key
value
}
`,
fragmentName: 'filter',
id: 'filter:2025'
})