【发布时间】:2019-05-26 06:45:42
【问题描述】:
我正在使用 Firebase 实时数据库。我有一个对象,其中包含我们所有用户创建的所有帖子。这个物体很大。
为了快速显示帖子,我们为每个用户提供了一个具有相关帖子 ID 的对象。
结构如下:
/allPosts/$postID/
: { $postID: {id: $postID, details: '', title: '', timestamp: ''} }
/user/$userID/postsRelevantToThisUser/
: { $postID: {id: $postID} }
'postsRelevantToThisUser' 仅包含帖子的 ID。我需要遍历每个 ID 并从 /allPosts/ 检索整个帖子信息
因此,客户端不必下载整个 allPosts 对象,应用程序会更快。
为此,我编写了以下代码。它仅成功检索和呈现相关帖子。每当在 Firebase 实时数据库中的 /postsRelevantToThisUser/ 添加或删除新的 postID 时,React Native 都会正确地重新呈现列表。
但是,当 /allPosts/$postID 中的任何内容发生更改时,例如:如果 title 参数更改,则不会反映在视图中。
有什么好办法解决这个问题?
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 });
})
})
【问题讨论】:
标签: javascript firebase react-native firebase-realtime-database