微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

删除特定查询的 __typename

如何解决删除特定查询的 __typename

我正在使用 @apollo/client 并在我的应用中查询图形协议。除了未使用 __typename 字段的 _Meta 查询外,所有查询都可以很好地与 __typename 配合使用。 所以我从那个查询中得到这个错误 - Null value resolved for non-null field '__typename'

我尝试了很多解决方案,但没有一个解决我的问题。

首先,如果我将 addTypename 设置为 false,那么 _Meta 查询可以正常工作,但是对于使用 __typename 字段的其他查询,缓存无法正常工作。 我尝试使用中间件来省略该特定查询__typename 字段,但奇怪的是我无法从操作/上下文对象中找到任何 __typename 键/值。 我还尝试在中间件的上下文缓存配置中将 addTypename 设置为 false,但没有奏效。

const cleanTypeName = new ApolloLink(
    (operation: Operation,forward: NextLink) => {
        if (operation.operationName === "_Meta") {
            if (operation.variables) {
                const omitTypename = (key,value) =>
                    key === "__typename" ? undefined : value
                operation.variables = JSON.parse(
                    JSON.stringify(operation.variables),omitTypename
                )
            }

            const context = operation.getContext()
            operation.setContext({
                ...context,cache: {
                    ...context.cache,addTypename: false,config: {
                        ...context.cache.config,},})
        }

        return forward(operation)
    }
)

实际上,如果我通过 console.log 检查 operation.variables 是空的,因为 _Meta 查询不需要传递任何参数。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。