#reactjs #graphql #apollo #react-apollo
#reactjs #graphql #apollo #реагировать-apollo
Вопрос:
Я использую сервер / клиент Apollo, и кэш, похоже, не работает при изменениях обновлений. (Создать, удалить). Сервер обновляется, но на интерфейсе ничего не происходит. Я должен перезагрузить страницу, чтобы показать новый элемент / показать изменение элемента.
Я следил за документами Apollo и смоделировал его после их реализации в изолированной среде. Дайте мне знать, если вам понадобится больше моего кода, спасибо.
Вот мой код:
<form
onSubmit={(e) => {
e.preventDefault();
createUser(
{
variables: {
name: input.value,
email: input.value,
password: input.value
}
},
{
update(cache, { data: { createUser } }) {
cache.modify({
fields: {
allUsers(existingUsers = []) {
const newUser = cache.writeFragment({
data: { createUser },
fragment: gql`
fragment NewUser on User {
name
email
}
`
});
return existingUsers.concat(newUser);
}
}
});
}
}
);
}}
>
Ответ №1:
Вам необходимо указать id
свойство в writeFragment
методе. Вот пример в документах:
client.writeFragment({
id: '5',
fragment: gql`
fragment MyTodo on Todo {
completed
}
`,
data: {
completed: true,
},
});
Кроме того, writeFragment
возвращает void
, поэтому вам нужно использовать, readFragment
чтобы получить нужные данные, или просто использовать данные, доступные в результате мутации
Комментарии:
1. Я вижу это сейчас в документах — для обновления объектов в кэше. Я немного дальше, пытаясь добавить новый объект.
2. Я понял это — мне пришлось присоединить его к фактическому перехвату, а не к вызову перехватчика.