Как исправить ошибку отсутствующего поля, вызванную обновлением кеша с помощью graphql и реагировать? - PullRequest
0 голосов
/ 29 апреля 2020

Я хочу исправить ошибку отсутствующего поля, которая появляется при обновлении кэша.

что я пытаюсь сделать? У меня есть ярлык с названием «Количество доступных предметов», который отображает количество и кнопки добавления, удаления. поэтому, когда пользователь нажимает кнопку «Добавить», это количество уменьшается, а нажатие кнопки «Удалить» увеличивает количество.

У меня есть два запроса: один для перечисления элементов LIST_ITEMS и другой для получения количества доступных элементов «GET_COUNT».

, как показано ниже, с их типами и схемой.

type Count {
    first: Int!,
    second: Int!,
}

type ITEM {
    name: String,
    id: ID!,
}

type Query {
    getCount: Count,
    listItems: [ITEM],
}


export const LIST_ITEMS = gql`
    query ListItems {
       listItems {
           name
           id
       }
    }
`;

 export const GET_COUNT = gql`
    query GetCount {
       getCount {
           first
           second
       }
    }
`;

 function Parent () {
     const { availableCount } = useGetCount();
     const Count = availableCount.first;
     const onAdd = async () => {
         try {
             await createItem({ name: name, Id: some_var.id });
         }
     };
     render = () => {
     return (
         <span>Count of items</span>
         <span>{Count}</span>
         <button onClick={onAdd}>Add</button>
     )
 }

Теперь, когда пользователь нажимает кнопку Добавить, вызывается мутация createItem, в которой мы обновляем кэш, чтобы обновить созданный элемент в списке элементов. а также уменьшить значение счетчика из кэша.

Это когда я получаю ошибку «Отсутствует поле GetCount в 2»

это значение 2 является значением значения счетчика, если отображаемое значение счетчика равно 3 это показывает 2. аналогично, если отображаемое значение счетчика равно 4, это показывает 3 по ошибке.

мутация createItem выглядит следующим образом:

const createItem = (variables: CreateItemInput) => {
    return mutation({
        variables,
        update: (cache, { data }) => {
            if (data) {
                const ItemsListCacheData: any = cache.readQuery({
                    query: LIST_ITEMS,
            });
            itemsListCacheData.listItems.push(data.createItem);
            cache.writeQuery({ query: LIST_ITEMS, data: itemsListCacheData });
            const countCacheData: any = cache.readQuery({
                query: GET_COUNT,
            });
            cache.writeQuery({
                query: GET_COUNT,
                data:
                    countCacheData.getCount.siteShares - 1, //doing this causes the error
            });
        }
    },
});

};

Может кто-нибудь, помогите мне исправить это «отсутствующее поле getCount in 3», учитывая, что значение Count равно 4.

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...