#vue.js #graphql #urql
Вопрос:
при запросе данных с сервера GraphQL urql добавляет поле _typename для отслеживания кэша:
{
__typename "Book"
name "test"
description "the book"
id "hPl39w4rzc2HZxkfHDyj"
auther "John Doe"
}
Я хочу обновить этот объект и сохранить его обратно в базу данных. когда useMutation
вызываемая функция __typename
также передается, и поскольку она не является частью схемы сервера, это приводит к ошибке:
Field "__typename" is not defined by type
Я знаю, что могу сделать что-то подобное, прежде чем вызывать useMutation:
delete input.__typename;
но я хочу знать, есть ли лучший способ глобальной обработки в urql? Например, в apollo-клиенте вы можете использовать ApolloLink для удаления __typename из всех переменных перед обновлением
Ответ №1:
const result = {
__typename: "Book",
name: "test",
description: "the book",
id: "hPl39w4rzc2HZxkfHDyj",
auther: "John Doe"
}
const {__typename, ...rest} = resu<
console.log(rest)
Вероятно, лучше всего сохранить этот маркер на объектах в клиенте graphql, потому что это помогает кэшу делать свое дело. Поэтому вы можете вместо этого удалить его по мере необходимости-здесь вы можете обновить «rest» и использовать его для вызова мутации обновления.
Комментарии:
1. Я бы также добавил, что есть возможность всегда автоматически скрывать это свойство, которую мы предлагаем на случай, если вы никогда не будете активно использовать его самостоятельно. Нам нравится быть откровенными, вот почему это не скрыто, но мы предлагаем такую возможность. Вызывается опция
maskTypename
, которую вы можете установитьtrue
при создании клиента: formidable.com/open-source/urql/docs/api/core/#client2. В моем случае иногда мне это нужно
typename
или нет. Можем ли мы определить этот параметр, когда мы создаем запрос вместо этого глобально на клиенте ?