У меня есть запрос upsert, который запускается при создании или обновлении. При обновлении Apollo интегрирует результат в кеш, но при создании его нет.Apollo Client: мутация Upsert только модифицирует кеш при обновлении, но не при создании
Вот запрос:
export const UPSERT_NOTE_MUTATION = gql`
mutation upsertNote($id: ID, $body: String) {
upsertNote(id: $id, body: $body) {
id
body
}
}`
Мой клиент:
const graphqlClient = new ApolloClient({
networkInterface,
reduxRootSelector: 'apiStore',
dataIdFromObject: ({ id }) => id
});
Ответ от сервера идентичен: Оба id
и body
возвращаются, но Аполлон не добавляет новых идентификаторов в data
объект кэша автоматически.
Возможно ли, что Apollo автоматически добавит новые объекты в data
без запуска последующей выборки?
Вот что мой магазин данных выглядит следующим образом:
UPDATE
Согласно документации, функция updateQueries
должна позволить мне выдвинуть новый элемент в мой список активов без необходимости повторять запрос на выборку из моего источника.
Функция выполняется, но все, что возвращается функцией, полностью игнорируется, и кеш не изменяется.
Даже если я что-то вроде этого: не меняет
updateQueries: {
getUserAssets: (previousQueryResult, { mutationResult }) => {
return {};
}
}
Ничто.
UPDATE # 2
До сих пор не могу получить список активов, чтобы обновить.
Внутри updateQueries
, вот что мой previousQueryResult
выглядит следующим образом:
updateQueries: {
getUserAssets: (previousQueryResult, { mutationResult }) => {
return {
assets: []
.concat(mutationResult.data.upsertAsset)
.concat(previousQueryResult.assets)
}
}
}
Но независимо от того, что я вернусь, хранилище данных не обновляется:
Для справки, здесь что каждый asset
выглядит так:
Извините за поздний ответ Dhaivat. Я просто обновляю свой вопрос с обновлением # 2. Тем не менее, к сожалению, это не может нормально работать. –