我正在构建聊天应用程序,并且我正在尝试识别用于指示未读消息的状态体系结构。
我的州目前包含一个邮件列表。在渲染时,我通过对话对它们进行分组,这样我就可以呈现收件人列表,并为所选收件人呈现消息。
最简单的方法是在状态中也存储lastRead
{recipient: lastReadTimestamp}
哈希值。在渲染时,计算时间戳大于存储的lastRead
时间戳的每个对话中的消息数,以获取未读消息的数量。选择收件人后,将该收件人的lastRead
时间戳设置为最新邮件的时间戳。
问题在于,当你离开时,有15条以上的消息进入 - 有些超出了视口,你必须滚动才能看到它们。选择该收件人后,它会将lastRead
时间戳标记为最新邮件,实际上将整个会话标记为"阅读"即使上面有消息已经被人看见了。
相反,我希望功能更像Slack&s。 in-view或InteractionObserver可以检测到邮件何时实际进入视口。
但是我会在州内存放什么?每条未读消息的ID?如果是这样,当我刷新并且我的应用程序收到所有消息时,它是如何知道它们中的任何一个被读取的?我可以存储每个读取消息的ID,但这听起来很笨拙。
有没有人为此看到过良好的设计模式?