如何在离线模式下更新Firebase实时数据库“推送”上的UI

时间:2019-01-17 11:29:37

标签: firebase react-native firebase-realtime-database react-native-firebase

我在我的应用中使用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,       身体:“身体”,       标题:“ 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)
})

2 个答案:

答案 0 :(得分:0)

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

  

您可以使用value事件读取内容的静态快照   在事件发生时存在的给定路径上。这个方法   附加侦听器时触发一次,每次触发一次   数据(包括子项)发生了变化。

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

答案 1 :(得分:0)

此问题通过将以下代码行添加到您的本机代码中而得以解决:

https://rnfirebase.io/docs/v5.x.x/core/default-app#Enable-Database-Persistence