Tam*_*fer 5 react-native aws-appsync aws-amplify
我已经弄清楚如何创建新用户并将基本字段写入 DynamoDB,例如用户名(字符串),但我找不到将 Union 作为输入之一的方法。
在我的示例中,当用户注册时,我想知道正在使用该应用程序的用户类型:要么是教师,要么是学生(应用程序将使用此信息根据用户类型显示不同的 UI)
我还没有找到任何这样的例子,所以也许这是不可能的?有人这样做过吗?有谁知道你能做到吗?或者也许我不应该试图把这个作为一个联盟来拯救……
我正在使用react-native、AWS Amplify、AppSync、Cognito。
我的架构:
type User
id: ID!
name: String!
userTypes: [UserType]
}
union UserType = Teacher | Student
Run Code Online (Sandbox Code Playgroud)
代码生成突变:
const registerUser = `mutation RegisterUser($input: CreateUserInput!) {
registerUser(input: $input) {
id
name
createdAt
updatedAt
userTypes {
... on Teacher {
id
name
subjectsTaught
}
... on Student {
id
name
lessons
}
}
}
}
`;
Run Code Online (Sandbox Code Playgroud)
然后是实际的 React Native 部分:
try {
await API.graphql(graphqlOperation(registerUser,
{ input: { name: "Tamsyn", userTypes: { Student } } } ));
console.log('created user');
} catch (err) {
console.log('error creating user', err);
}
Run Code Online (Sandbox Code Playgroud)
我可以使用这样的枚举:
type User
id: ID!
name: String!
userType: [UserType]
}
enum UserType {
Teacher
Student
}
Run Code Online (Sandbox Code Playgroud)
然后,当用户注册时,如果他们选择“老师”,我可以调用此方法:
await API.graphql(graphqlOperation(createUser, { input: { name: name, userType: 'Teacher' } }));
Run Code Online (Sandbox Code Playgroud)
或者如果用户选择学生我可以打电话......
await API.graphql(graphqlOperation(createUser, { input: { name: name, userType: 'Student' } }));
Run Code Online (Sandbox Code Playgroud)
然后,当用户在应用程序中时,如果我想找出要显示的个人资料:
if (user.userType === 'Teacher') {
navigation.navigate('TeacherProfile');
} else if (user.userType === 'Student') {
navigation.navigate('StudentProfile');
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1845 次 |
最近记录: |