Подтвердить что ты не робот

Клиент Apollo дает мне ошибку "магазин уже содержит идентификатор" - что это значит?

В ответном нативном проекте я создаю объект, а затем перенаправляю экран на вновь созданную страницу деталей объекта, и я получаю эту ошибку:

Возможное необработанное обещание (id: 0): Ошибка сети: ошибка сохранения: приложение попыталось написать объект без идентификатора, но в хранилище уже содержится идентификатор XYZ для этого объекта.

Глядя в базу данных, я вижу, что элемент правильно создан на предыдущем шаге. Переход на один и тот же экран и элемент через список (не после создания и перенаправления), кажется, работает нормально. Должен ли я ждать или каким-то образом установить какое-то время, чтобы магазин apollo оставался верным?

Я использую стандартный клиент apollo @graphql binding/wrapping

GQL:

 query getEvent($eventId: ID!) {
    Event(id:$eventId) {
      id
      headline
      photo
      location
      startTime
      creator {
        username
        photo
      }
    }
  }
`;

И здесь фрагмент кода

@graphql(getEventGql,{
  options: ({route}) => {
    console.log('route params', route.params);
    return {
      variables: {
        eventId: route.params.eventId,
      }
    }
  },
})

@connect((state) => ({ user: state.user }))
export default class EventDetailScreen extends Component {
...
4b9b3361

Ответ 1

Вы должны добавить id также в поле creator:

query getEvent($eventId: ID!) {
    Event(id:$eventId) {
      id
      headline
      photo
      location
      startTime
      creator {
        id
        username
        photo
      }
    }
  }

В общем, убедитесь, что добавили id во все подвыборы ваших запросов.

Ответ 2

Также будьте осторожны, __typename или избегайте его, если вы тестируете с MockProvider. Но в некоторых случаях вы должны включить __typename разрешив его в MockProvider