【发布时间】:2020-07-28 22:39:44
【问题描述】:
我怎样才能做一个类似于 Whatsapp 聊天屏幕中的日期系统?
如您所见,消息按日期分组,我的意思是它们按日期分隔。
这是我找到的更好解释的屏幕截图:
我在 FlatList 中执行此操作,同时一一呈现消息。
这就是我所做的
let previousDate = "";
if (index > 0) {
previousDate = moment(this.state.messages[index - 1].created_at).format(
"L"
);
} else {
previousDate = moment(this.state.messages.created_at).format("L");
}
let currentDate = moment(item.created_at).format("L");
所以,我为 FlatList 的 renderItem 属性创建了一个功能组件,所以 item 和 index 来自 FlatList 的实际数据。
我在这里要做的是,基本上抓取当前渲染项目的created_at 并将其与前一个项目的created_at 进行比较,为此,我使用存储在状态。但不幸的是,当 FlatList 呈现索引号为0 的第一个项目时,在状态的原始数据中没有前一个元素可以比较,这就是为什么我检查是否大于 0 并从上一个索引项目中获取日期。在 Else 情况下,这意味着在渲染第一个项目时,不要查找前一个项目,而只需获取 created_at。
下面我检查currentDate 和previousDates 是否不相同,渲染一个自定义组件,否则不渲染任何东西。
{previousDate && !moment(currentDate).isSame(previousDate, "day") ? ( // custom component) : null}
它应该是这样工作的,但主要问题是,我使用inverted FlatList 来让消息从屏幕底部到顶部。但是现在,由于它是一个倒置的平面列表,项目从底部到顶部呈现,它给了我这样的结果:
注意:一开始,消息也被颠倒了,但我通过发送它们也从数据库中颠倒了这个问题。
所以,我不知道如何才能实现我的目标,并像第一张图片那样做。
谢谢!
【问题讨论】:
-
你解决了这个问题吗?...尝试相同但反应
-
还没有,它还在我的 TODO 列表中
标签: react-native chat whatsapp