1

当从 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

4

1 回答 1

1
const result = {
    __typename:  "Book",
    name:  "test",
    description: "the book",
    id:  "hPl39w4rzc2HZxkfHDyj",
    auther: "John Doe"
}

const {__typename, ...rest} = result;

console.log(rest)

最好将该标记保留在 graphql 客户端中的对象上,因为它有助于缓存完成其工作。因此,您可以根据需要将其删除——在这里您可以更新“rest”并使用它来调用您的更新突变。

于 2021-05-18T22:41:16.307 回答