dataIdFromObject 错误地覆盖其他查询的缓存
dataIdFromObject overwriting cache from other queries incorrectly
所以使用 dataIdFromObject
如下:
cache: new InMemoryCache({
dataIdFromObject: object => {
switch (object.__typename) {
case 'AppKey':
return object.appKeyId
case 'App':
return object.appId
default:
return defaultDataIdFromObject(object)
}
},
})
是一些如何从应用重写 appKey 中的第一个 object.name,有时反之亦然。例如
data.getAppKeys = [{ appKeyId: 1, name: 'My App' }, ...correctObjects]
当后端的密钥为 {appKeyId: 1, name: 'myAppKey'}
时。 注释掉 dataIdFromObject
中的任何一个 case
时不会发生这种情况。
如何获取缓存以重写正确的查询?
您需要有一个超出数字的唯一标识符,因为数字会匹配并且缓存会错误地覆盖,解决方案是将 __typename
添加到数据标识符中,如下所示:
dataIdFromObject: object => {
const getID = (typename, id) => `${typename}_${id}`
switch (object.__typename) {
case 'AppKey':
return getID(object.__typename, object.appKeyId)
case 'App':
return getID(object.__typename, object.appId)
default:
return getId(object.__typename, defaultDataIdFromObject(object))
}
},
})
所以使用 dataIdFromObject
如下:
cache: new InMemoryCache({
dataIdFromObject: object => {
switch (object.__typename) {
case 'AppKey':
return object.appKeyId
case 'App':
return object.appId
default:
return defaultDataIdFromObject(object)
}
},
})
是一些如何从应用重写 appKey 中的第一个 object.name,有时反之亦然。例如
data.getAppKeys = [{ appKeyId: 1, name: 'My App' }, ...correctObjects]
当后端的密钥为 {appKeyId: 1, name: 'myAppKey'}
时。 注释掉 dataIdFromObject
中的任何一个 case
时不会发生这种情况。
如何获取缓存以重写正确的查询?
您需要有一个超出数字的唯一标识符,因为数字会匹配并且缓存会错误地覆盖,解决方案是将 __typename
添加到数据标识符中,如下所示:
dataIdFromObject: object => {
const getID = (typename, id) => `${typename}_${id}`
switch (object.__typename) {
case 'AppKey':
return getID(object.__typename, object.appKeyId)
case 'App':
return getID(object.__typename, object.appId)
default:
return getId(object.__typename, defaultDataIdFromObject(object))
}
},
})