firebase - 如何在离线模式下更新 Firebase 实时数据库“推送”上的 UI
问题描述
我在我的应用程序中使用 react-native-firebase。我面临的问题是当用户在离线时尝试推送数据时如何处理 UI 更新。
如果用户在线,我们可以使用 on() 方法来获取实时更新,但是当他们离线时该怎么做。我们知道推送的数据存储在缓存中,当用户再次在线时推送。这个缓存的数据可以用来做我想要实现的目标吗?
这是我用来接收实时更新的代码:
var ref333 = firebase.database().ref(`/user-posts/${uid}/`)
ref333.on('value',function (snap) {
var s = snap.val();
console.log("NEW POSTS "+JSON.stringify(s))
})
我用来推送数据的代码。
var postData = { uid:uid,body:'body',title:'title',starCount:0 };
// Get a key for a new Post.
var newPostKey = firebase.database().ref().child('posts').push().key;
var ref222 = firebase.database().ref(`/posts/${newPostKey}`)
var ref333 = firebase.database().ref(`/user-posts/${uid}/${newPostKey}`)
ref222.push(postData, function (onComplete) {
console.log("COMPLETED")
ref333.push(postData,function (onComplete) {
console.log("NEXT COMPLETED")
}, function (error) {
console.log("ERROR IN ",error)
})
}, function (error) {
console.log("error == "+error)
})
解决方案
即使在离线模式下,也应该触发 .on snspashot 侦听器。根据文档: https ://firebase.google.com/docs/database/web/read-and-write
您可以使用 value 事件来读取给定路径中内容的静态快照,因为它们在事件发生时就存在。此方法在附加侦听器时触发一次,并且在每次数据(包括子项)发生更改时再次触发。
这也应该在离线模式下工作。如果您没有收到更新 - 其他问题。
推荐阅读
- realm - 如何让keycloak导出领域用户然后退出
- gatsby - 内容小数
- php - 使用 facebook-graph-api 从 facebook 上的一位用户获取所有事件
- c++ - 为什么 QT 告诉我我的 QDialog 继承类不是 QWidget?
- java - Mockito 中的类型安全问题 - 模拟集合
- ios - 使用 SwiftUI 实现 Apple Pay
- kotlin - 为什么带有 newSingleThreadExecutor 的 runBlocking 块不结束?
- python - 让python等待通过tkinter设置变量
- angular - Angular Jasmine 单元测试 NullInjectorError: R3InjectorError(CompilerModule)[CheckForUpdateService -> CheckForUpdateService]:
- javascript - discord.js "messageDelete" 监听器返回一个带有未定义内容的 msg