После мутации, когда я обновляю кеш, изменения отражаются в пользовательском интерфейсе, но появляется следующая ошибка:
Нарушение инварианта: ошибка хранилища: приложение попыталось записать объект без указанного имени типа, но хранилище уже содержит объект с именем типа ItemCodeConnection для объекта с идентификатором $ ROOT_QUERY.itemCodes ({"filter": {"number": 10000001}}). Элемент selectionSet, который пытался записать: {"kind": "Field", "name": {"kind": "Name", "value": "itemCodes"}, "arguments": [{"kind" : "Аргумент", "название": { "вид": "название", "значение": "фильтр"}, "значение": { "вид": "Переменная", "название": { "вид":» Имя " "значение": "фильтр"}}}], "директивы": [], "selectionSet": { "вид": "SelectionSet", "выбор": [{ "вид": "поле"," название ": {" вид ":" имя " "значение": "itemCodes"}, "аргументы": [], "директива": [], "selectionSet": { "добрые": "SelectionSet"," Выборки ": [{" вид ":" FragmentSpread», "название": { "вид": "Name", "значение": "itemCodeTile"}, "директивы": []}, { "вид": "поле" , "название": { "вид": "название", "значение": "__ Ьурепат"}}]}}, { "вид": "поле", "название": { "вид": "название",» значение ":" __ typename "}}]}}
Запрос GraphQL:
const CREATE_ITEM_CODE_SPEC = gql`
mutation createItemCodeSpec($input: createItemCodeSpecInput) {
createItemCodeSpecification(input: $input){
__typename
id
itemCode {
number
}
product
spec_class
grade
}
}
`
const GET_ITEM_CODE = gql`
query itemCode($filter: filterInput){
itemCodes(filter: $filter){
itemCodes {
number
type
description
group
item_code_spec {
id
itemCode {
number
}
product
spec_class
grade
}
created_on
created_by
changed_on
changed_by
}
}
}
`
Ниже приведена мутация:
const [mutation, { data, loading, error}] = useMutation(
CREATE_ITEM_CODE_SPEC,
{
update(cache, { data: { createItemCodeSpecification } }){
const currentData = cache.readQuery({
query: GET_ITEM_CODE,
variables: { filter : {number:itemCode} }
})
cache.writeQuery({
query: GET_ITEM_CODE,
variables: { filter : {number:itemCode} },
data: {
...currentData,
itemCodes: {
itemCodes: currentData.itemCodes.itemCodes.map((itemCode, index) => {
return {
...itemCode,
item_code_spec: index === 0? [
...itemCode.item_code_spec,
createItemCodeSpecification
] : itemCode.item_code_spec
}
})
}
}
})
}
}
);