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))
        }
      },
    })