В одаренном чате отсутствует _id для сообщения - React Native

Итак, я создаю функциональную часть чата для своего приложения. Я использую sendbird sdk вместе с подаренным чатом для пользовательского интерфейса.

Мои сообщения не отображаются, и я продолжаю получать следующее предупреждение. "GiftedChat: _id отсутствует в сообщении"

сообщения отображаются пустыми

Теперь я трижды проверил, что мой sendbird настроен правильно, я правильно вошел в систему и также создал соответствующий канал. Оба они работают.

Глядя на журнал моих сообщений, они публикуют, как показано.

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

Но они публикуются как messageId. Нужно ли мне изменить структуру этого сообщения? Если да, то как мне это сделать, поскольку sendbird уже настроил это заранее. Или я могу изменить это в gifted-чате?

Пожалуйста, взгляните на приведенные ниже фрагменты моего кода.

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
/>

person Oscar Fen    schedule 05.02.2019    source источник


Ответы (3)


Вам следует использовать этот формат:

{   
      _id: 1,
      text: 'message',
      createdAt: new Date(),
      user: {
        _id: 2,
        name: 'nickname',
        avatar: 'YourimageURL',
      },
    },
person Sabrine Abdelghani    schedule 06.02.2019
comment
как я могу использовать этот формат? У вас есть github с вашим примером, основанным на вашем руководстве blog.emiketic.com/2018/. Спасибо - person Oscar Fen; 06.02.2019
comment
Также для вас функция onSend 'const channel = this.props.state.params.channel;' Но это дало мне неопределенную ошибку, поэтому я изменил ее на this.props.navigation.state.params; - person Oscar Fen; 06.02.2019

Если вы не следуете указанному ими формату, он выдает это предупреждение. Итак, что мы сделали для этого ... мы просто настроили наш объект 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;
    });
person Trinadh Koya    schedule 25.04.2019

messages = {this.state.messages} Здесь {this.state.messages} должен иметь следующую структуру

id:

текст:

создано в:

пользователь: {_id: name: avatar:}

  1. Вариант 1: вы получаете все соответствующие значения полей как есть из sendbird и обновляете промежуточный массив с ожидаемыми именами свойств, а затем обновляете this.state.messages Вариант 2: функция Onsend должна вставлять значения для следующих заголовков столбцов в sendbird id: text: createdAt: user: {_id: name: avatar:}

Таким образом, когда вы получаете сообщение от sendbird, вы получаете точно такие же поля, как и в формате giftedchat.

person Bhol    schedule 29.04.2020