gpt4 book ai didi

react-native - 您如何使用 AWS AppSync/DynamoDB (React Native) 创建具有联合作为字段的 Mutation

转载 作者:行者123 更新时间:2023-12-04 13:40:19 24 4
gpt4 key购买 nike

我已经研究出如何创建新用户并将基本字段写入 DynamoDB,如用户名(字符串),但我找不到将联合作为输入之一的方法。

在我的示例中,当用户注册时,我想知道使用该应用程序的用户类型是什么:要么是教员,要么是学生(该应用程序将使用此信息根据用户类型显示不同的 UI)

我还没有找到任何这样的例子,所以也许这是不可能的?有没有人做过这个?有谁知道你能不能做到?或者也许我不应该试图将它保存为一个联盟......

我正在使用 react-native、AWS Amplify、AppSync、Cognito。

我的架构:

type User
id: ID!
name: String!
userTypes: [UserType]
}

union UserType = Teacher | Student

代码生成突变:
const registerUser = `mutation RegisterUser($input: CreateUserInput!) {
registerUser(input: $input) {
id
name
createdAt
updatedAt
userTypes {
... on Teacher {
id
name
subjectsTaught
}
... on Student {
id
name
lessons
}
}
}
}
`;

然后实际 react 原生部分:
try {
await API.graphql(graphqlOperation(registerUser,
{ input: { name: "Tamsyn", userTypes: { Student } } } ));
console.log('created user');
} catch (err) {
console.log('error creating user', err);
}

最佳答案

您可以在 graphQL 查询( https://graphql.org/learn/schema/ )和( https://www.apollographql.com/docs/apollo-server/schema/unions-interfaces/ )中使用 Union

然而,问题是突变不支持输入联合。具体来说,这段代码是正确的

userTypes {
... on Teacher {
id
name
subjectsTaught
}
... on Student {
id
name
lessons
}
}

我认为对您不起作用的是以下代码部分,因为您试图将 Union 作为输入传递。 Mutation 不能将联合作为输入。
`mutation RegisterUser($input: CreateUserInput!) { registerUser(input: $input){...}

突变只能采用标量类型或称为 Input 的特殊类型,它可以是映射对象但所有内部字段 必须是标量类型。

所以你不能使用联合进行突变。其实我不同意LxL的例子,你应该把你的mutation schema定义的类型都分离成Input类型,然后使用Union进行查询。

对此的一个潜在解决方案是为教师/学生使用 Enum 类型并将这些类型扁平化为一个 Input 类型,然后在存在不同字段时处理解析器中的差异。

关于react-native - 您如何使用 AWS AppSync/DynamoDB (React Native) 创建具有联合作为字段的 Mutation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58163548/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com