问题描述
当从 GraphQL Server 查询数据时,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-client 中,您可以在更新之前使用 ApolloLink 从所有变量中删除 __typename
解决方法
const result = {
__typename: "Book",name: "test",description: "the book",id: "hPl39w4rzc2HZxkfHDyj",auther: "John Doe"
}
const {__typename,...rest} = result;
console.log(rest)
最好将该标记保留在 graphql 客户端中的对象上,因为它有助于缓存完成其任务。所以你可以根据需要删除它——在这里你可以更新“rest”并使用它来调用你的更新突变。