Я пытаюсь сделать optimisticResponse
в мутации с ApolloClient с vue -apollo.
Сама мутация работает нормально - сервер обновляется, и когда я обновляю sh, страница, вставка успешно появилась. Тем не менее, optimisticResponse
, который записывается в запрос, становится «неопределенным» после повторного запуска функции update()
с «реальным» ответом от сервера.
Мой код мутации выглядит следующим образом:
this.$apollo.mutate({
mutation: UPSERT_ITEMS,
variables: {
todoInput: [todoInput]
},
update: (store, result) => {
const upsertTodos = result.data!.upsertTodos
const newTodo = upsertTodos.todo
const data = store.readQuery<QueryResult>({ query: GET_PROJECTS })
console.log("Results from the cache:", data);
data!.rc_todos.push(newTodo)
console.log("after that push, data looks like...", data)
store.writeQuery({ query: GET_PROJECTS, data })
// re-reading the query for debugging purposes:
const sameData = store.readQuery<QueryResult>({ query: GET_PROJECTS })
console.log("New results from the cache:", sameData)
},
optimisticResponse: {
__typename: "Mutation",
upsertTodos: {
__typename: "InsertedTodo",
id: 1,
todo_id: 1,
todo: {
id: 1,
label: nodeTitle,
children: [],
__typename: "rc_todos"
}
},
},
})
Обратите внимание, что сейчас я вызываю readQuery
второй раз в update()
для целей отладки.
Во втором вызове readQuery
при первом запуске update()
(то есть сразу после вставки optimisticResponse
это выглядит так: ... так что все выглядит хорошо, поля там совпадают данные, которые уже были в кеше, и т. д. c.
Но, когда update()
запускается во второй раз (для обработки результатов с сервера), наш optimisticResponse
находится "там", но как undefined
:
Это приводит к ошибке TypeError: Cannot read property '__typename' of undefined
.
Если честно, я не уверен, что должно происходить в этот момент в жизненный цикл ... должен ли OptimisticResult все еще быть там? Или он уже должен быть удален? В любом случае, я уверен, что его там не должно быть и undefined
, так как это вызывает ошибку.