【问题标题】:React native flatlist - differentiating between a sent and received messageReact native flatlist - 区分发送和接收的消息
【发布时间】:2020-12-14 21:26:35
【问题描述】:

我目前正在尝试实现我的聊天屏幕,我正在尝试区分收到的消息和发送的消息。

我创建了一个名为 MessageBubble 的组件,如果消息是由当前用户发送的,它会使用一个名为 mine 的 prop。

通过下面的实现,当我在 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",
    },
    ]

【问题讨论】:

    标签: react-native


    【解决方案1】:

    试试这个方法

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

    【讨论】:

    【解决方案2】:

    您错误地关闭了括号。 message.Messages.map(x=&gt;x.senderId) === user.id? 这意味着您遍历了 messages 数组,map 返回了一个新数组,并且您检查了这个新数组是否等于 user.id,这总是错误的。

    【讨论】:

    • 哦,这就是为什么 clg(message.Messages.map(x=>x.senderId)) 不断返回一个仅包含 senderId 的新数组的原因。我已经使用了上面的@Nooruddin 解决方案并且它有效。你同意这是正确的方法吗?
    • 一个小问题,你以前用过socket.io吗?
    • Nooruddin 的回答如您所见是正确的。我只是指出你的错误:))
    • @kd12345 不,我不熟悉。
    • 是的。您可以自行检查。 const newArray = [1, 2, 3].map(num =&gt; num); newArray 在这种情况下将是 [1, 2, 3] 数组。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-27
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多