Javascript 如何在React/Firebase聊天应用程序中处理可见/不可见的聊天信息?

Javascript 如何在React/Firebase聊天应用程序中处理可见/不可见的聊天信息?,javascript,reactjs,firebase,firebase-realtime-database,Javascript,Reactjs,Firebase,Firebase Realtime Database,我正在尝试使用React和Firebase实时数据库在一对一聊天应用程序中处理可见和不可见的消息状态 我是否可以为数据库中的每条发送消息存储seen:false值,以及当接收方装载组件(消息)时,是否可以再次向数据库发出请求并将“seen”的值更改为“true” 是否太多的数据库请求可能是一个问题 在数据库中存储每个发送消息(seen:false值)以及在接收方装载组件(消息)时,再次向数据库发出请求并将“seen”的值更改为“true”是否是一种良好的做法 我不认为你需要为每一条信息都这么做

我正在尝试使用React和Firebase实时数据库在一对一聊天应用程序中处理可见和不可见的消息状态

我是否可以为数据库中的每条发送消息存储seen:false值,以及当接收方装载组件(消息)时,是否可以再次向数据库发出请求并将“seen”的值更改为“true”

是否太多的数据库请求可能是一个问题

在数据库中存储每个发送消息(seen:false值)以及在接收方装载组件(消息)时,再次向数据库发出请求并将“seen”的值更改为“true”是否是一种良好的做法

我不认为你需要为每一条信息都这么做

假设您有User1和User2,他们进行私人对话

User1发送两条消息:

Id: 1 Message: "hello"
Id: 2 Message: "how are you"
User2然后查看消息-然后发送到服务器:

User: 2 ChatID: abc LastViewedMessage: 2
User1返回消息,并从服务器接收User2的lastViewedMessage id

我看不出有什么理由将其存储在“逐条消息”的基础上——除非您特别希望该功能仅将某些消息标记为已查看


您还可以存储消息的时间戳,以及“上次查看时间”,而不是消息ID

您可能希望跟踪单个消息状态的唯一原因是,如果用户确认已看到每个消息。但大多数聊天应用程序只是通过存储用户看到的最后一条消息的ID/时间戳来跟踪该消息。如果用户1发送5条消息,而用户2全部阅读了这些消息,那么我在所有已阅读消息中将状态更改为“已看到”的逻辑应该是什么?是否每个消息仍然需要具有真/假显示值?忘记每个消息显示真/假的概念。无论会话的消息存储在何处,您都希望在每个用户的基础上包括他们看到的最后一条消息。因此,逻辑将是user2已从发送的5条消息中看到(最后一条消息id)。是的,我理解这一点,但在我的UI中,所有消息都已看到/未看到状态,我的问题是,如果我只知道最后一条消息的id,我将如何确切地更改所有以前消息的UI状态?我应该使用状态吗?:)是-为此,使用state是有意义的。假设您只处理1-1个对话,您可以将lastSeenMessage存储在您的状态中,如果您处理的是组消息,您将需要一个对象映射用户名:lastSeenMessage。要在单个消息上实际显示“已看到的消息”图标,您必须有逻辑来检查消息是否已被看到(消息id