react-native - React native flatlist - 区分发送和接收的消息
问题描述
我目前正在尝试实现我的聊天屏幕,我试图区分收到的消息和发送的消息。
我创建了一个名为 MessageBubble 的组件,如果消息是由当前用户发送的,它会使用一个名为 mine 的道具。
使用下面的实现,当我在 2 个不同的设备上打开聊天时,它们都有正确的消息(由当前用户发送),其中一个应该在左侧。
这是我的平面列表代码:
<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.log(message.Messages.map(x=>x.senderId)), i get an array with all the senderIds
```react
Array [
43,
43,
43,
43,
]
当我 console.log(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",
},
]
解决方案
试试这个方法
renderItem={({item,index})=>(
<MessageBubble
text={item.message}
mine={item.senderId === user.id} // this way
/>
)}
推荐阅读
- php - 下载生成的 excel 只能在本地工作 | WordPress
- ubuntu - 使用 remove 卸载 logstash 在 ubuntu 上不起作用
- java - 线程“主”org.openqa.selenium.StaleElementReferenceException 中的异常:androidx.test.uiautomator.StaleObjectException
- apache-kafka-streams - 带有 EOS 的流中的拦截器中的 Kafka 事务
- postgresql - 无法访问 Chainlink 浏览器 UI
- apache-spark - 如何在 Apache Spark 中实现递归算法?
- security - 如何检测 TCP 数据包中的 TLS 数据?
- sql - SQL 如何将 M/DD/YYYY (1/31/1960) 格式化为 DD/MM/YYYY (31/01/1969)
- javascript - 仅特定数据集的图例 - chart.js
- c++ - 如何使用 exrtk 将方程评估为布尔值?