【问题标题】:Fat Query fragment not included in the query sent to GraphQLFat Query 片段未包含在发送到 GraphQL 的查询中
【发布时间】:2017-04-28 22:21:45
【问题描述】:

发送到 GraphQL 的突变查询不包括 track 查询和我的 Fat Query 之间的交集结果。

这是我的 Mutation 类:

getMutation() {
  return Relay.QL`mutation { updateTag }`
}

getVariables() {
  return {
    id: this.props.id,
    name: this.props.name,
    isFollowed: this.props.isFollowed,
  }
}

getFatQuery() {
  return Relay.QL`
    fragment on UpdateTagPayload {
      viewer {
        followedTags {
          tagList {
            name
          }
        }
      }
    }
  `;
}

getConfigs() {
  return [
    {
      type: 'FIELDS_CHANGE',
      fieldIDs: {
        viewer: this.props.viewerID,
      },
    },
  ]
}

这是结果查询,发送到 GraphQL:

mutation FollowTagMutation($input_0:UpdateTagInput!) {
  updateTag(input:$input_0) {
    clientMutationId
  }
}

我希望我的 Fat Query 中定义的部分字段也存在。

在控制台中,Tracked Fragment Variables 是一个空对象 (Object{}),Tracked Fragment Query 只是空的。

所以看起来,当track和fat query被拦截时,结果是一个空的Intersection Query。

对此有任何帮助吗?我在这里错过了什么?

【问题讨论】:

    标签: relayjs


    【解决方案1】:

    所以,我的问题的解决方案有两个:

    1. 使用this.props.relay.commitUpdate,而不是Relay.Store.commitUpdate

      此时,我真的不知道为什么(找不到有关此的文档),但在我的情况下使用后者不起作用。一旦我发现,我会更新这一点。

    2. 将我的 Fat Query 中的 viewer 连接到我本地 Relay 存储中的 viewer

      这与此处其他答案提供的建议有关(感谢@maplechori 和@Ahmad Ferdous!)。

      但是,不必在 Mutation 类中创建static fragments 位;我只是确保在 React 组件中通过 Relay 获取 viewer { id },并通过 props 将其传递给 Mutation,因此它在 getConfigs() 位中使用。

    【讨论】:

    • 你能发布有效的代码吗?我不太明白你说的Connect the viewer in my Fat Query to the viewer in the my local Relay store 是什么意思。
    【解决方案2】:

    我建议在 FollowTagMutation 上设置片段,然后在调用该突变的组件上使用 ${FollowTagMutation.getFragment('viewer')} 将其拉出。

    然后确保在 Relay.Store.commitUpdate(new FollowTagMutation( viewer: this.props.viewer ..... 在同一个组件上传递查看器。

    【讨论】:

    • 好的,所以我设置了调用 FollowTagMutation 的 React 组件,以在 Relay.QL 部分包含 ${FollowTagMutation.getFragment('viewer')}。我做Relay.Store.commitUpdate(new FollowTagMutation({ ..., viewer: this.props.viewer})); 但是在突变类上,在getConfigs()this.props.viewer 即将到来undefined
    • 另外,当我触发突变时,我在控制台上收到此错误:RelayMutation: 提供给 FollowTagMutation 的预期道具 viewer 将由 Relay 获取数据。
    【解决方案3】:

    (这个适合注释,我放在这里是为了维护代码格式。)

    根据您的信息,我怀疑您需要提供查看器 ID 才能获得预期结果。将fragments 添加到FollowTagMutation 突变:

      static fragments = {
        viewer: () => Relay.QL`
          fragment on Viewer {
            id,
          }
        `,
      };
    

    【讨论】:

    • 这似乎与@maplechori 的回答有关。谢谢!
    猜你喜欢
    • 2023-04-05
    • 2016-05-04
    • 2016-08-23
    • 2021-06-20
    • 2019-10-02
    • 1970-01-01
    • 2020-09-11
    • 2018-08-04
    • 2019-08-16
    相关资源
    最近更新 更多