从Firebase JS SDK(Web)迁移到react-native-firebase进行离线存储

时间:2019-07-09 11:05:08

标签: react-native firebase-realtime-database google-cloud-firestore react-native-firebase

我一直在将Firebase Web SDK用于我的本机应用程序(我正在使用FIRESTORE来存储数据)。到目前为止,我还没有遇到任何问题。一切顺利。但是,现在我想向我的应用程序添加某种脱机存储机制,以便即使我的用户处于脱机状态,我仍然可以提供某些功能或显示从上一次连接的会话缓存的某些内容。经过一番调查,我觉得react-native-firebase是首选的方式。现在我有一些问题,我想从经验丰富的人那里得到一些建议。

  • react-native-firebase是唯一的选择吗?我已经快速了解了AsyncStorage,它只是一个键值存储。考虑到我想做的最简单的事情是浏览Firestore文档列表,这种存储似乎不适合离线进行。就像如果我想使用AsyncStorage进行此操作一样,我必须将从Firestore后端获得的所有内容(也许是数百个文档)放入,将它们保留为单个字符串值,取回它们,解析它们,对它们进行分页等等。为所有这些编写自定义逻辑和方法。
  • 如果我要使用react-native-firebase,只需启用离线存储(我认为)即可为您解决这个问题,并且您不必为使用离线存储编写任何自定义逻辑。我假设为脱机使用而持久保存的数据与在Firestore数据库中具有相同的结构。我觉得如果我使用react-native-firebase以外的其他任何东西,我将不得不处理所有自定义逻辑,以便自己离线保存,读取和呈现数据。是吗?
  • 我最关心的是可能需要的代码重构量。我有很多行代码,还有许多.get().then()行,这些行是我从Firestore获取和呈现数据的地方。在react-native-firebase的文档中说:
  

...旨在尽可能地镜像官方Firebase Web SDK   可能。

我不确定这在多大程度上是正确的。我已经检查了react-native-firebase的firestore模块的reference documentation,但是我无法确定实际上支持多少种查询方法。

所以,要走的路是react-native-firebase的路?尝试重构现有代码是否会给我带来沉重的负担?您有类似的经历吗? 我将不胜感激任何帮助。

非常感谢...

1 个答案:

答案 0 :(得分:1)

此处是react-native-firebase库的维护程序。

  

...旨在尽可能接近官方Firebase Web SDK。

这是次要的免责声明,因为两者之间存在一些差异,主要在于必须使用React Native实现某些事情。

例如,enablePersistence在RNFB上不存在。相反,默认情况下将启用持久性,并且可以通过settings()来关闭(或打开)持久性。

  

react-native-firebase是唯一的选择吗?我已经快速阅读了有关AsyncStorage的信息,它只是一个键值存储。考虑到我想做的最简单的事情是浏览Firestore文档列表,这种存储似乎不适合离线进行。就像如果我想使用AsyncStorage进行此操作一样,我必须将从Firestore后端获得的所有内容(也许是数百个文档)放入,将它们保留为单个字符串值,取回它们,解析它们,对它们进行分页等等。为所有这些编写自定义逻辑和方法。

从技术上讲这是可能的,但是正如您所提到的,这样做还有一些缺点。使用Firestore,当设备离线(在应用程序中很常见)并且尝试读取/写入时,它将读取/更新您的本地缓存,这仍将触发事件侦听器。当应用重新上线时,它将自动为您与服务器重新同步。

  

如果我要使用react-native-firebase,只需启用离线存储-我认为-会为您解决这个问题,并且您不必为使用离线存储编写任何自定义逻辑。我假设为脱机使用而持久保存的数据与在Firestore数据库中具有相同的结构。我觉得如果我使用react-native-firebase以外的其他任何东西,我将不得不处理所有自定义逻辑,以便自己离线保存,读取和呈现数据。是吗?

这一切都为您处理。我们包装了Firebase原生SDK,因此如果您在不使用React Native的情况下开发原生Android / iOS应用,则期望具有相同的一致性。

  

我最担心的是可能需要的代码重构量。我有很多行代码,还有很多.get()。then()类代码,这些行是我从firestore获取并呈现数据的地方。

通常,由于上述原因,除了少数一些次要方法外,所有内容都是相同的。

  

所以,要走的路是react-native-firebase的路?尝试重构现有代码是否会给我带来沉重的负担?您有类似的经历吗?我将不胜感激。

我建议任何使用React Native和Firebase开发的人使用RNFB。它提供了Web SDK无法随React Native提供的许多额外功能。除了更麻烦的设置和更改导入之外,它的工作原理也应大致相同。