amazon-web-services - Appsync graphQL 错误:“变量 'input' 已强制 NonNull 类型 'ID!' 的 Null 值”,尽管控制台日志记录 id
问题描述
我使用 react native 和 aws Appsync,我正在创建一个聊天应用程序并有一个用于创建消息的输入框。当我尝试创建一条消息时,它给了我这个错误:
Object {
"data": null,
"errors": Array [
Object {
"locations": Array [
Object {
"column": 24,
"line": 1,
"sourceName": null,
},
],
"message": "Variable 'input' has coerced Null value for NonNull type 'ID!'",
"path": null,
},
],
}
这是我的输入组件:
type props = {
chatRoomId: any
}
const Input = ({chatRoomId}: props) => {
const [userId, setUserId] = useState(null);
const [message, setMessage] = useState('');
useEffect(() => {
const fetchUser = async () => {
const userInfo = await Auth.currentAuthenticatedUser();
setUserId(userInfo.attributes.sub);
}
fetchUser();
console.log("userID1:", userId)
}, [])
console.log("userID2:", userId)
const onSendPress = async () => {
try {
console.log("userID3:", userId)
await API.graphql(
graphqlOperation(
createMessage, {
input: {
content: message,
userID: userId,
chatRoomID: chatRoomId
}
}
)
)
} catch (e) {
console.log(e);
}
setMessage('');
}
return (
<View style={styles.container}>
<TextInput
placeholder='Type your message...'
value={message}
onChangeText={setMessage}
style={styles.input}
/>
<View style={styles.iconContainer}>
<TouchableOpacity onPress={onSendPress}>
<Ionicons name='ios-send' color='#FFF' size={25} style={styles.icon}/>
</TouchableOpacity>
</View>
</View>
)
}
export default Input;
当我在控制台记录 ID 时,我得到了正确的 ID,但是当我发送它时似乎没有使用 ID。我的 graphql 架构是:
type User @model {
id: ID!
name: String!
dob: String!
imageUri: String
chatRoomUser: [ChatRoomUser] @connection(keyName: "byUser", fields: ["id"])
}
type ChatRoomUser
@model
@key(name: "byUser", fields: ["userID", "chatRoomID"])
@key(name: "byChatRoom", fields: ["chatRoomID", "userID"]) {
id: ID!
userID: ID!
chatRoomID: ID!
user: User @connection(fields: ["userID"])
chatRoom: ChatRoom @connection(fields: ["chatRoomID"])
}
type ChatRoom @model {
id: ID!
chatRoomUsers: [ChatRoomUser] @connection(keyName: "byChatRoom", fields: ["id"])
messages: [Message] @connection(keyName: "byChatRoom", fields: ["id"])
lastMessageID: ID!
lastMessage: Message @connection(fields: ["lastMessageID"])
}
type Message
@model
@key(
name: "byChatRoom",
fields: ["chatRoomID", "createdAt"],
queryField: "messagesByChatRoom") {
id: ID!
createdAt: String!
content: String!
userID: ID!
chatRoomID: ID!
user: User @connection(fields: ["userID"])
chatRoom: ChatRoom @connection(fields: ["chatRoomID"])
}
我在这里大致遵循 github 的教程:https ://github.com/Savinvadim1312/WhatsappClone
因此,如果有人可以帮助我指出我可以改变的任何事情,那就太好了!谢谢!
解决方案
推荐阅读
- python - 文件夹位置更改后烧瓶运行命令失败
- r - 计算R中向量区间的中位数
- xamarin - 使用带有 Autofac 和 Shell 的 FirebasePushNotificationPlugin 插件的 Xamarin 表单无法显示 UI 元素或重定向
- javascript - 使用 Reactstrap:如何一次只切换一个 Collapse?
- rust - 尝试在 rust 中迭代 2 个文件
- go - 如何在删除函数中处理 GORM 错误?
- angular - Angular 11 中的嵌入式画面仪表板不会在页面刷新时呈现
- python - 强制 Python 从命令行更新命令历史文件?
- javascript - 为什么我们在 ReactJs 中使用 Context API?如果我们使用简单的道具会发生什么?
- css - 如何根据屏幕大小更改 Bootstrap 列的大小?