相关疑难解决方法(0)

如何从使突变失败的graphql响应中删除`__typename`字段

我尝试在 GraphQL 的 Apollo 客户端中更改 addTypeName: false

apollo.create({
  link: httpLinkWithErrorHandling,
  cache: new InMemoryCache({ addTypename: false }),
  defaultOptions: {
    watchQuery: {
      fetchPolicy: 'network-only',
      errorPolicy: 'all'
    }
  }
Run Code Online (Sandbox Code Playgroud)

但它可以工作,并且会在控制台中抛出以下消息

fragmentMatcher.js:26 You're using fragments in your queries, but either don't have the addTypename:true option set in Apollo Client, or you are trying to write a fragment to the store without the __typename.Please turn on the addTypename option and include __typename when writing fragments so that Apollo Clientcan accurately match fragments.
Run Code Online (Sandbox Code Playgroud)

,

Could not …
Run Code Online (Sandbox Code Playgroud)

node.js apollo graphql apollo-client express-graphql

16
推荐指数
1
解决办法
2万
查看次数

从GraphQL响应中清除不需要的字段

我的GraphQL客户端请求一个对象。

这是一个相当简单的对象:

type Element {
    content: [ElementContent]
    elementId: String
    name: String
    notes: String
    type: String
    createdAt: String
    updatedAt: String
  }
Run Code Online (Sandbox Code Playgroud)

使用特殊类型ElementContent,它很小,看起来像这样:

  type ElementContent {
    content: String
    locale: String
  }
Run Code Online (Sandbox Code Playgroud)

现在,当我在客户端上查询此对象时,顶层对象和底层对象均具有其他属性(如果我尝试按原样克隆主体,则会干扰更新对象);

值得注意的是,GraphQL似乎__typename在父对象中提供了一个属性,而在子对象中,它们也具有typename和一个Symbol(id)属性。

在此处输入图片说明

我很乐意将此对象复制到状态,在状态下更新,然后克隆状态并将其发送给我的update突变。但是,由于GraphQL本身提供的未知属性,我遇到了麻烦。

我试着做:

delete element.__typename 效果很好,但随后我还需要遍历子级对象(动态对象数组),并且可能还必须删除这些属性。

我不确定在此等式中是否缺少某些内容,或者我应该只是在代码中苦苦挣扎,然后进行循环+删除(最初尝试进行forEach循环时收到错误)。我尝试做的事情有更好的策略吗?还是我走在正确的道路上,只需要一些良好的循环代码即可清除不需要的属性?

javascript ecmascript-6 graphql

10
推荐指数
2
解决办法
3567
查看次数