在突变之前从 urql 查询结果中删除 __typename 字段

removing __typename field from urql query result before mutation

从 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-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”并使用它来调用您的更新突变。