在突变之前从 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”并使用它来调用您的更新突变。
从 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 在更新
之前从所有变量中删除 __typenameconst result = {
__typename: "Book",
name: "test",
description: "the book",
id: "hPl39w4rzc2HZxkfHDyj",
auther: "John Doe"
}
const {__typename, ...rest} = result;
console.log(rest)
最好将该标记保留在 graphql 客户端中的对象上,因为它有助于缓存执行其操作。因此,您可以根据需要移除它——在这里您可以更新“rest”并使用它来调用您的更新突变。