【问题标题】:Cannot read property 'id' of undefined. Variable 'id' has coerced Null value for NonNull type 'ID!'无法读取未定义的属性“id”。变量 'id' 已强制 NonNull 类型 'ID!' 的 Null 值
【发布时间】:2020-05-01 09:42:02
【问题描述】:

我正在使用 react native 天才聊天,我正在尝试弄清楚如何将 _id、text、createdAt、userid 和 name 设置为我的变异参数。我收到以下错误variable id has coerced null valuecannot read property 'id' is undefined。我的主要问题是将 messageid 和 messagetext 设置为什么。我正在使用与 AWS 的 react native 天才聊天。

export const createMessage = `mutation createMessage($id: ID! $groupchatid: ID! $message: String! $createdUser: String! $createdTime: String!) {
    createMessage(input:{ id:$id groupchatid:$groupchatid, message:$message, createdUser: $createdUser createdTime: $createdTime}) {
      id
      groupchatid
      message
      createdUser
      createdTime
    }
}`;
    const user = Auth.currentAuthenticatedUser();
    this.setState({ username: user.username});
  }

  MessagesMutation = async () => {
    const AddMessage = { message: this.state.messages, createdUser: this.state.username, groupchatid: this.state.groupchatname };
    const newGroupChatMessage = await API.graphql(graphqlOperation(createMessage, AddMessage));
    console.log(JSON.stringify(newGroupChatMessage));
  };


  componentWillMount() {
    this.setState({
      messages: [
        {
          _id: id,
          text: message,
          createdAt: new Date(),
          user: {
            _id: createdUser,
            name: createdUser,
            avatar: 'https://placeimg.com/140/140/any',

          },


        },
      ],
    })
  }


  componentDidMount() {
    const { navigation } = this.props;
    const value = navigation.getParam('value')
    this.setState({groupchatname: value})
  }



  onSend(messages = []) {
    this.setState(previousState => ({
      messages: GiftedChat.append(previousState.messages, messages),
    }))
  }
  render(){
    const { groupchatname} = this.state;
  return (
      <SafeAreaView style={{ flex: 1 }}>
        <Header style={styles.headerColor}>
            <Text style={styles.text}>{groupchatname}</Text> 
        </Header>
        <GiftedChat
            messages={this.state.messages}
            renderUsernameOnMessage={true}
            onSend={messages => this.onSend(messages), this.MessagesMutation}
            user={{
            _id: this.user,
            name: this.user,
            avatar: 'https://placeimg.com/140/140/any'
            }}```

【问题讨论】:

    标签: react-native aws-appsync


    【解决方案1】:

    您已将id 定义为参数

    createMessage($id: ID! $groupchatid: ID! $message: String! $createdUser: String! 
    $createdTime: String!)
    


    并且忘记传递参数

    const AddMessage = { 
     id:"valu...." //here
     message: this.state.messages, 
     createdUser: this.state.username,
     groupchatid: this.state.groupchatname 
         };
    

    【讨论】:

    • 我的问题是将 messageid 和 message text 设置为什么。这就是我一直想弄清楚的
    • 第一个正确的第一个问题variable id has coerced null value.next,你使用放大吗?
    • 为了纠正这个问题,我将架构中的 id 设为可为空。我删除了!所以 createMessageInput 中的 Id 可以为空。但是我仍然收到未定义 id 的错误。是的,我正在使用放大功能
    • 通过放大,id是自动生成的,所以你可以从突变输入中删除id,componentWillMount中发生了什么,是在突变之前还是之后,请附上完整代码,不清楚
    • 我相信@Alex 是对的。您要么需要在 AddMessage 对象中提供“id”变量,要么需要更改查询,使其不需要ID! 类型的变量。将查询签名更改为mutation createMessage($groupchatid: ID! $message: String! $createdUser: String! $createdTime: String!) { createMessage(input:{ groupchatid:$groupchatid, message:$message, createdUser: $createdUser createdTime: $createdTime}) { id groupchatid message createdUser createdTime } }(例如删除“id”引用)应该可以解决问题。
    猜你喜欢
    • 2018-09-11
    • 2019-10-24
    • 2019-11-18
    • 1970-01-01
    • 2018-10-01
    • 2021-06-27
    • 2021-05-20
    • 2019-07-25
    • 1970-01-01
    相关资源
    最近更新 更多