我正在使用类似于Tinder的“卡片堆栈”创建一个带有Firebase Realtime DB后端的应用程序。每张卡片都是一张新的未读帖子,如果用户用完了新帖子,他们就会用完卡片。但是,我不知道为此构建数据的最佳方法。我可以在用户下存储阅读帖子的ID,然后当我观看帖子提要时,我可以过滤掉客户端的阅读帖子吗?
这看起来有点乱,而且表现不是很好的选择。有更好的选择吗?
编辑:我正在思考的粗略代码:
数据示例
posts:
"-KibasdkjbSAdASd": {
title: 'New Post',
body: {
...
}
},
"-KisadBVsdadSd": {
title: 'New Post 2',
body: {
..
}
}
"-KibaFNQsicaASd": {
title: 'New Post 3',
body: {
...
}
}
users :
"-KisadBVsdadSd": {
name: 'Tom',
readPosts: {
"-KibasdkjbSAdASd": {
title: 'New Post',
body: {
...
}
},
"-KisadBVsdadSd": {
title: 'New Post 2',
body: {
..
}
}
}
}
代码
const rootRef = firebase.database.ref();
const postRef = rootRef.child("posts");
const readPostRef = rootRef.child("users/"+uid+"/readPosts");
let readPosts= [];
//Get initial list of read posts
readPostRef.once("value", function(snapshot) {
readPosts = Object.keys(snapshot);
});
//Update read posts when added
readPostRef.on("child_added", function(snapshot) {
readPosts = Object.keys(snapshot);
});
//Get list of posts, filtered on read post array
urlRef.on("value", function(snapshot) {
snapshot.forEach(function(child) {
if(!readPosts.includes(child.key)){
//Unread post
}
});
});
答案 0 :(得分:0)
这取决于您向用户显示卡片的顺序。
如果您以可预测的顺序显示它们(例如从最新到最旧),您只需记住用户看到的最后一张卡的ID。
如果您以随机或个性化的顺序显示它们,您可能确实需要准确跟踪每个用户已经看过的卡片。
我不确定为什么那会很乱或表现不好。因此,如果您想要更好的选择,您必须展示如何实施凌乱/慢速选项。
答案 1 :(得分:0)
我遇到了同样的设计问题。我只看到两个选择,也许还有其他选择!
1)下载每个帖子,然后忽略已阅读的帖子。帖子很多时很贵。
2)将每个帖子的副本保存到每个用户帐户,并允许他们在阅读后将其删除。当用户很多时很贵。