Appsyn c и Apollo Client, как справиться с кэшированием списков с помощью dataIdFromObject? - PullRequest
0 голосов
/ 17 апреля 2020

В настоящее время есть элементы кеша, к которым обращаются нормально, это простые объекты, но они борются с тем, что должно произойти, когда объект, передаваемый в dataIdFromObject, является объектом с ключом элементов, который является массивом объектов. Например:

const dataIdFromObject = (obj) => {
  switch(obj.__typename) {
    case 'Post':
      return `${obj.__typename}.${obj.categoryId}.${obj.postId}
    case 'PostConnection':
      return obj.items ? obj.items[0].categoryId : defaultDataIdFromObject(obj)
    default:
      return defaultDataIdFromObject(obj)
  }
}

obj.items - это массив объектов Post.

Проблема заключается в том, что данные время от времени кэшируются из других категорий с использованием первого элемента в массив вложенного элемента. Есть ли какие-либо проблемы с этим?

Может ли быть возможное состояние гонки, если запрос не отменен, что может привести к тому, что данные из другой категории будут храниться под неправильным ключом кэша, как при поиске в localStorage Вы могли бы видеть сообщения в других, скажем, категории а в категории б.

PostConnection.a {
  items:
    cat a item
    cat b item
    cat b item
}
...