首页 > 解决方案 > 如何在离线模式下更新 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)
})

标签: firebasereact-nativefirebase-realtime-databasereact-native-firebase

解决方案


即使在离线模式下,也应该触发 .on snspashot 侦听器。根据文档: https ://firebase.google.com/docs/database/web/read-and-write

您可以使用 value 事件来读取给定路径中内容的静态快照,因为它们在事件发生时就存在。此方法在附加侦听器时触发一次,并且在每次数据(包括子项)发生更改时再次触发。

这也应该在离线模式下工作。如果您没有收到更新 - 其他问题。


推荐阅读