【问题标题】:Gifted chat missing '_id' for message - React Native有天赋的聊天缺少消息的“_id” - React Native
【发布时间】:2019-02-05 16:26:18
【问题描述】:

所以我正在为我的应用构建聊天功能部分。我正在使用 sendbird sdk 以及用于 UI 的天才聊天。

我的消息不会显示,并且我不断收到以下警告。 'GiftedChat: _id 缺少消息''

现在我已经三重检查了我的 sendbird 配置是否正确,我已正确登录并且还创建了适当的频道。这些都有效。

查看他们发布的我的消息日志,如图所示。

{ 
  messageType: 'user',
  messageId: 2122453749,
  etc ... 
}

但他们发布为 messageId ,我是否必须更改此结构?如果是这样,我该怎么做,因为 sendbird 已经预先配置了它。或者我可以在有天赋的聊天中更改它吗?

请看下面我的代码的sn-ps。

getChannelMetaData(channel) {
  if (channel) {
    const self = this;
    const messagesQuery = channel.createPreviousMessageListQuery();

    messagesQuery.load(50, true, (messages, error) => {
      if (error) {
        console.error(error);
      }
      this.setState({
        messages,
      });
    });
  }
}

onSend(messages = []) {
  const handle = this;
  const sb = SendBird.getInstance();
  const { channel } = this.props.navigation.state.params;

  this.setState(previousState => {
    channel.sendUserMessage(messages[0].text, (response, error) => {
      if (!error) {
        handle.getChannelMetaData(channel);
      }
    });
    console.log(this.state.messages);
    return { messages: GiftedChat.append(previousState.messages, messages) };
  });
}

<GiftedChat
  messages={this.state.messages}
  renderBubble={bubble}
  loadEarlier
  renderLoadEarlier={loadEarlier}
  isAnimated
  keyboardShouldPersistTaps="never"
  onSend={messages => this.onSend(messages)}
  user={{
    _id: userID,
  }}
  showUserAvatar
/>

【问题讨论】:

    标签: react-native chat sendbird react-native-gifted-chat


    【解决方案1】:

    你应该使用这种格式:

    {   
          _id: 1,
          text: 'message',
          createdAt: new Date(),
          user: {
            _id: 2,
            name: 'nickname',
            avatar: 'YourimageURL',
          },
        },
    

    【讨论】:

    • 如何使用该格式?您是否有基于您的教程 blog.emiketic.com/2018/… 的示例的 github。谢谢
    • 也为您提供 onSend 函数 'const channel = this.props.state.params.channel;'但这给了我一个未定义的错误,所以我将其更改为 this.props.navigation.state.params;
    【解决方案2】:

    如果您不遵循他们指定的格式,则会引发此警告。所以我们为此做了什么......我们只是从下面的聊天消息数组中自定义了我们的 JSON 对象

    let giftedChatMessages = chatMessages.map((chatMessage) => {
          let gcm = {
            _id: chatMessage.id,
            text: chatMessage.get("text"),
            createdAt: chatMessage.get("createdAt"),
            user: {
              _id: chatMessage.get("user").id,
              name: chatMessage.get("user").get("name"),
              avatar: chatMessage.get("user").get("avatarUrl")
            }
          };
          return gcm;
        });
    

    【讨论】:

      【解决方案3】:

      messages={this.state.messages} 这里,{this.state.messages} 应该有以下结构

      身份证号:

      文字:

      创建时间:

      用户:{ _ID: 姓名: 头像: }

      1. 选项 1:您从 sendbird 获取所有相应的字段值,并使用预期的属性名称更新中间数组,然后更新 this.state.messages 选项 2:Onsend 函数应在 sendbird 中插入以下列标题的值 ID: 文本: 创建于: 用户:{ _ID: 姓名: 头像: }

      因此,当您从 sendbird 检索消息时,您会获得与 giftedchat 格式所期望的完全相同的字段。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-31
        • 2023-02-08
        • 1970-01-01
        • 1970-01-01
        • 2018-11-01
        • 2020-11-11
        • 2020-06-19
        • 2021-09-25
        相关资源
        最近更新 更多