首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在连接的对象上调用GraphQL突变(案例: React和亚马逊网络服务)

问在连接的对象上调用GraphQL突变(案例: React和亚马逊网络服务)
EN

Stack Overflow用户
提问于 2021-07-02 12:44:51
回答 1查看 139关注 0票数 0

我已经创建了这个GraphQL模式,并通过Amplify将其传递给AppSync:

代码语言:javascript
复制
type Member @model {
  id: ID!
  name: String!
}

type Team @model {
  id: ID!
  title: String!
  members: [Member]
}

AWS Amplify为团队更新生成了以下变异:

代码语言:javascript
复制
export const updateTeam = /* GraphQL */ `
  mutation UpdateTeam(
    $input: UpdateTeamInput!
    $condition: ModelTeamConditionInput
  ) {
    updateTeam(input: $input, condition: $condition) {
      id
      name
      ...
    }
  }
`;

我想通过以下方式更新团队:

代码语言:javascript
复制
  const doSomething = async (id) => {
    try {
      const team = teams[id];
      team.title = // new title

      // cut off automatically added bits

      const teamData = await API.graphql(
        graphqlOperation(updateTeam, { input: team })
      );

    } catch (error) {
      console.error(`Mutation failed`, error);
    }
  };

我正在成功地读取team,并且可以看到members是team对象的一部分。但是,它会引发一个错误:

代码语言:javascript
复制
message: "The variables input contains a field name 'members' that is not defined for input object type 'UpdateTeamInput' "

我应该在哪里以及如何解决这个问题?我的意思是,我必须这样做吗:

代码语言:javascript
复制
...
graphqlOperation(updateTeam, { input: team, members: team.members })
...

尽管我没有接触到team[id]中的members对象

EN

回答 1

Stack Overflow用户

发布于 2021-07-02 12:49:12

这是因为您没有在graphql schema中将成员定义为input类型,而是将其定义为类型类型。

按如下方式定义成员输入类型:

代码语言:javascript
复制
input MemberInput {
  id: ID!
  name: String!
}

在您的graphql模式中,它将会工作。

请注意,如果您的类型是自定义的,那么graphql中的参数应该是输入的类型和类型的返回值类型。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68219721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档