Клиент 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 {
...
Ответы
Ответ 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