Ahm*_*man 5 database firebase google-cloud-firestore
我想为我的用户显示提要。
每个帖子都有一个“喜欢”按钮(比如在 twitter、Instagram 中……)
如果帖子已经被喜欢或不被喜欢,我想显示一个不同的图标。
我现在面临的问题是,如果用户已经喜欢该帖子,我就找不到一种经济的方式来获取信息。最好的方法是,如果我可以通过单个查询获得这些信息。我有两种方法,我认为这还不是最好的方法。
查询用户“喜欢”的集合,每次他加载一个提要
这将花费 2 个查询每个加载的帖子,这在性能和计费方面可能会很昂贵。例如,观看 20 个帖子将花费 40 次查询。
一次性下载所有喜欢的帖子并离线查询
我可以检查给定的帖子是否已经以客户端的方式被用户喜欢。但这会由“喜欢”给帖子点赞的用户一次加载许多不必要的数据。
我的想法正确吗?有没有更好的方法来解决这个问题,同时又不会因为计费和性能而变得过于昂贵?
您可以在每个帖子中创建一个数组,其中包含喜欢该帖子的用户的用户 ID。
// data model
posts/{postID}
-- content (string)
-- likes: [
user123,
user567,
user895,
]
Run Code Online (Sandbox Code Playgroud)
然后像这样查询帖子。
db.collection('posts')
.orderBy('createdAt', 'desc')
.limit(50)
Run Code Online (Sandbox Code Playgroud)
然后在快照里面。
db.collection('posts')
.orderBy('createdAt', 'desc')
.limit(50).get()
.then(snapshot => {
if (snapshot.empty) {
console.log('No matching documents.');
return;
}
snapshot.forEach(doc => {
console.log(doc.id, '=>', doc.data());
var liked = false;
var likes = doc.data().likes;
if (likes.includes(user_uid){
liked = true
}
return createPost(doc.data(), liked);
});
})
.catch(err => {
console.log('Error getting documents', err);
});
Run Code Online (Sandbox Code Playgroud)
然后下面创建一个名为“createPost()接受参数dataand ”的函数likedStatus。
添加{likedStatus ? "You liked this" : "Like post"}到您的createPost函数中。
createPost = (data, likedStatus) => {
return (
<div class="content">
<div class="liked">
{likedStatus ? "You liked this" : "Like post"}
</div>
</div>
)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
894 次 |
| 最近记录: |