Нативный плоский список React — различие между отправленным и полученным сообщением

В настоящее время я пытаюсь реализовать свой экран чата, где я пытаюсь различать полученные сообщения и отправленные сообщения.

Я создал компонент под названием MessageBubble, который принимает свойство, называемое моим, если сообщение отправляется текущим пользователем.

С приведенной ниже реализацией, когда я открываю чат на двух разных устройствах, у них обоих есть сообщение справа (отправленное текущим пользователем), где у одного из них оно должно быть слева.

вот мой плоский код:

     <FlatList
        inverted
        data = {message.Messages}
        keyExtractor = {(message) => message.id.toString()}
        renderItem = {({item,index})=>(
        message.Messages.map(x=>x.senderId) === user.id?
        <MessageBubble mine text= {item.message} />:<MessageBubble text = {item.message} />
        )}
        />
``
user.id ----> is the id of the current user


When i console.info(message.Messages.map(x=>x.senderId)), i get an array with all the senderIds
```react
    Array [
    43,
    43,
    43,
    43,
    ]

Когда я console.info(message.Messages), я получаю следующее:

    Array [
    Object {
    "conversationId": 15,
    "createdAt": "2020-12-14T11:38:41.471Z",
    "id": 54,
    "message": "Hey user1",
    "receiverId": 47,
    "senderId": 43,
    "updatedAt": "2020-12-14T11:38:41.471Z",
    },
    Object {
    "conversationId": 15,
    "createdAt": "2020-12-14T10:28:54.685Z",
    "id": 52,
    "message": "Test12345",
    "receiverId": 47,
    "senderId": 43,
    "updatedAt": "2020-12-14T10:28:54.685Z",
    },
    ]
Умерло ли Create-React-App?
Умерло ли Create-React-App?
В этом документальном фильме React.dev мы исследуем, мертв ли Create React App (CRA) и какое будущее ждет этот популярный фреймворк React.
Освоение React Native: Пошаговое руководство для начинающих
Освоение React Native: Пошаговое руководство для начинающих
React Native - это популярный фреймворк с открытым исходным кодом, используемый для разработки мобильных приложений. Он был разработан компанией...
В чем разница между react native и react ?
В чем разница между react native и react ?
React и React Native - два популярных фреймворка для создания пользовательских интерфейсов, но они предназначены для разных платформ. React - это...
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
Если вы уже умеете работать с React, создание мобильных приложений для iOS и Android - это новое приключение, в котором вы сможете применить свои...
Хуки React: что это такое и как их использовать
Хуки React: что это такое и как их использовать
Хуки React - это мощная функция библиотеки React, которая позволяет разработчикам использовать состояние и другие возможности React без написания...
0
0
91
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Попробуйте так

renderItem = {({item,index})=>(
    <MessageBubble 
       text = {item.message} 
       mine = {item.senderId === user.id} // this way 
    />
)}

Привет, Нооруддин, спасибо. Я хотел спросить, вы знакомы с socket.io?

kd12345 14.12.2020 14:35

Нет, извините, я понятия не имею

Nooruddin Lakhani 14.12.2020 14:46

Привет, извините, что беспокою вас снова, вы успели взглянуть на мой вопрос?

kd12345 17.12.2020 11:52

Я пробовал stackoverflow.com/questions/65325432/…

Nooruddin Lakhani 17.12.2020 12:02

Вы неправильно закрыли скобку. message.Messages.map(x=>x.senderId) === user.id? это означает, что вы перебрали массив сообщений, карта вернула новый массив, и вы проверили, равен ли этот новый массив user.id или нет, что всегда ложно.

ооо, вот почему clg(message.Messages.map(x=>x.senderId)) продолжает возвращать новый массив только с senderId. Я использовал решение @Nooruddin выше, и оно сработало. Вы согласны, что это правильный подход?

kd12345 14.12.2020 14:29

Быстрый вопрос, вы использовали socket.io раньше?

kd12345 14.12.2020 14:30

Как видите, ответ Нооруддина правильный. Я лишь указал на твою ошибку :))

Leri Gogsadze 14.12.2020 14:32

@ kd12345 Нет, я не знаком.

Leri Gogsadze 14.12.2020 14:32

Хорошо, спасибо, ценю это :), так карта всегда возвращает новый массив правильно?

kd12345 14.12.2020 14:36

Да. Вы можете проверить это самостоятельно. const newArray = [1, 2, 3].map(num => num); В этом случае newArray будет массивом [1, 2, 3].

Leri Gogsadze 14.12.2020 14:40

Другие вопросы по теме