Я работаю над приложением React Native, которое использует Firebase's Firestore для бэкэнда.Прямо сейчас, каждый раз, когда приходит новое сообщение, я извлекаю все сообщения из Firestore и обновляю свое состояние, хотя пришло только одно новое сообщение.
function listenCurrentChat(dispatch, chatID) {
const address = "chats/" + chatID + "/messages";
firebase.firestore().collection(address).orderBy('createdAt')
.onSnapshot(function (querySnapshot) {
dispatch({
type: CLEAR_MESSAGES,
payload: {
chatID: chatID,
}
});
querySnapshot.forEach(function (doc) {
//local
if (doc.metadata.hasPendingWrites) {
dispatch({
type: ADD_MESSAGE,
payload: {
chatID: chatID,
message: {...doc.data(), createdAt: new Date()}
}
});
} else {
dispatch({
type: ADD_MESSAGE,
payload: {
chatID: chatID,
message: {...doc.data(), createdAt: doc.data().createdAt.toDate()}
}
});
}
});
});
}
Очевидно, что это очень плохо, потому что я 'Я использую много операций чтения только для одного нового сообщения, а также пользовательский опыт не очень хорош, поскольку существует постоянная задержка.Я также пытался сохранить адреса этих прослушивателей в реальном времени в состоянии избыточности и прослушивать метку времени последнего сообщения, но это тоже не казалось хорошим решением, так как я больше не принимал во внимание тот факт, что предыдущие сообщенияможет быть отредактировано.Что может быть хорошим способом обновления чатов в части React Native, чтобы я использовал как можно меньше операций чтения Firestore?
Заранее спасибо.