【问题标题】:dataIdFromObject overwriting cache from other queries incorrectlydataIdFromObject 错误地覆盖来自其他查询的缓存
【发布时间】:2020-10-25 02:46:52
【问题描述】:

所以使用dataIdFromObject如下:

cache: new InMemoryCache({
      dataIdFromObject: object => {
        switch (object.__typename) {
          case 'AppKey':
            return object.appKeyId
          case 'App':
            return object.appId
          default:
            return defaultDataIdFromObject(object)
        }
      },
    })

是如何从 app 重写 appKey 中的第一个 object.name,有时反之亦然。例如

data.getAppKeys = [{ appKeyId: 1, name: 'My App' }, ...correctObjects],当后端的密钥为{appKeyId: 1, name: 'myAppKey'}dataIdFromObject 注释掉任何一个cases 时不会发生这种情况。

如何获取缓存以重写正确的查询?

【问题讨论】:

    标签: apollo react-apollo apollo-client


    【解决方案1】:

    您需要有一个超出数字的唯一标识符,因为数字会匹配并且缓存会错误地覆盖,解决方案是将__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))
            }
          },
        })
    

    【讨论】:

      猜你喜欢
      • 2022-11-09
      • 2016-02-10
      • 2015-12-19
      • 1970-01-01
      • 2018-10-18
      • 1970-01-01
      • 1970-01-01
      • 2019-02-22
      • 2014-08-22
      相关资源
      最近更新 更多