Я использую базу данных Firebase Realtime. У меня есть объект, в котором есть все сообщения, созданные всеми нашими пользователями. Этот объект огромен.
Для быстрого отображения сообщений мы дали каждому пользователю объект с соответствующими идентификаторами сообщений.
Структура выглядит так:
/allPosts/$postID/
: { $postID: {id: $postID, details: '', title: '', timestamp: ''} }
/user/$userID/postsRelevantToThisUser/
: { $postID: {id: $postID} }
'postsRelevantToThisUser' содержит только идентификаторы сообщений. Мне нужно перебрать каждый из этих идентификаторов и получить всю информацию о сообщении из / allPosts /
В результате клиенту не придется загружать весь объект allPosts, и приложение будет работать намного быстрее.
Для этого я написал следующий код. Он успешно извлекает и отображает только соответствующие сообщения. Всякий раз, когда новый postID добавляется или удаляется из / postsRelevantToThisUser / в базе данных реального времени Firebase, React Native правильно перерисовывает список.
Однако, когда что-либо в / allPosts / $ postID изменяется, например: если изменяется параметр заголовка, он не отражается в представлении.
Какой хороший способ решить эту проблему?
let userPostRef = firebase.database().ref(`/users/${uid}/postsRelevantToThisUser`)
userPostRef.on('value', (snapshot) => {
let relPostIds = [];
let posts = [];
snapshot.forEach(function(childSnapshot) {
const {id} = childSnapshot.val();
relPostIds.push(id);
})
relPostIds.map(postId => {
firebase.database().ref(`allPosts/${postId}`).on('value', (postSnapshot) => {
let post = postSnapshot.val()
posts.push(post);
this.setState({ postsToRender:posts });
})
})