使用React Native时,我存储数据的选项有哪些?(iOS和Android)

使用React Native时,我存储数据的选项有哪些?(iOS和Android),android,ios,react-native,Android,Ios,React Native,我在React原生世界还是新手,通常在移动/原生世界也是如此,我发现在数据持久性方面文档有点缺乏 我在React Native中存储数据的选项是什么?每种类型的含义是什么?例如,我看到有本地存储和异步存储,但我也看到了领域之类的东西,我很困惑所有这些如何与外部数据库一起工作 我特别想知道: 数据持久化有哪些不同的选项 对于每种情况,持久性的限制是什么(即数据何时不再可用)?例如:关闭应用程序、重新启动手机等 对于每一种,在iOS和Android中实现是否存在差异(一般设置除外) 脱机访问数据的

我在React原生世界还是新手,通常在移动/原生世界也是如此,我发现在数据持久性方面文档有点缺乏

我在React Native中存储数据的选项是什么?每种类型的含义是什么?例如,我看到有本地存储和异步存储,但我也看到了领域之类的东西,我很困惑所有这些如何与外部数据库一起工作

我特别想知道:

  • 数据持久化有哪些不同的选项
  • 对于每种情况,持久性的限制是什么(即数据何时不再可用)?例如:关闭应用程序、重新启动手机等
  • 对于每一种,在iOS和Android中实现是否存在差异(一般设置除外)
  • 脱机访问数据的选项比较如何?(或者离线访问通常是如何处理的?)
  • 我还需要考虑其他因素吗
谢谢你的帮助

快速而肮脏:只需将+++用于react native

它几乎完全符合react原生世界,对android和ios都很有吸引力。此外,它周围有一个坚实的社区,有大量的信息

有关工作示例,请参阅Facebook上的

数据持久化有哪些不同的选项

对于react native,您可能希望使用redux和redux persist。它可以使用多个存储引擎。异步存储和redux持久文件系统存储是RN的选项

还有其他选项,比如Firebase或Realm,但我从未在RN项目中使用过这些选项

对于每种情况,持久性的限制是什么(即数据何时不再可用)?例如:关闭应用程序、重新启动手机等

使用redux+redux persist,您可以定义什么是持久化的,什么不是。如果未持久化,则在应用程序运行时存在数据。持久化后,数据会在应用程序执行之间持久化(关闭、打开、重新启动手机等)

Android上的异步存储默认限制为6MB。可以配置更大的限制(在Java代码上)或使用redux持久文件系统存储作为Android的存储引擎

对于每一种,在iOS和Android中实现是否存在差异(一般设置除外)

使用redux+redux persist+AsyncStorage,android和iOS上的设置完全相同

脱机访问数据的选项比较如何?(或者离线访问通常是如何处理的?)

使用redux,Offline访问几乎是自动的,这要归功于它的设计部分(动作创建者和还原者)

您获取和存储的所有数据都是可用的,您可以轻松地存储额外的数据以指示状态(获取、成功、错误)和获取时间。通常,请求获取不会使旧数据无效,组件只会在收到新数据时更新

这同样适用于另一个方向。您可以存储发送到服务器的数据,这些数据仍然挂起,并相应地进行处理

我还需要考虑其他因素吗


React提倡一种反应式的应用程序创建方式,Redux非常适合它。您应该在使用常规Android或iOS应用程序中使用的选项之前尝试一下。另外,你会发现更多的文档和帮助。

上面的人命中了正确的存储注释,但是如果你还需要考虑任何需要存储的PII数据,那么你也可以使用像ASyncStorage未加密的东西一样隐藏到密钥链中。它可以作为持久化配置的一部分应用在redux persist中。

以下是我在确定推进当前几个应用程序项目的最佳方式时学到的知识

异步存储(以前是响应本机的“内置”存储,现在自行移动)

我将异步存储用于生产应用程序。存储保留在设备本地,未加密(如另一个答案中所述),如果删除应用程序,存储将消失,但应作为设备备份的一部分保存,并在升级过程中保持不变(本机升级和通过CodePush进行的代码升级)

结论:局部保存;您可以提供自己的同步/备份解决方案

SQLite

我参与的其他项目都使用sqlite3进行应用程序存储。这为您提供了类似SQL的体验,可压缩数据库也可以在设备之间传输。我没有任何将它们同步到后端的经验,但我认为存在各种库。有用于连接到SQLite的RN库

数据以传统数据库格式存储,数据库、表、键、索引等都以二进制格式保存到磁盘。可以通过命令行或具有SQLite驱动程序的应用程序直接访问数据

结论:局部保存;您提供同步和备份

Firebase

Firebase提供了一个实时noSQL数据库和一个JSON文档存储(如MongoDB),用于保持1到n个客户端的同步。这些文档讨论了离线持久性,但仅针对本机代码(Swift/Obj-C、Java)。React Native使用的Google自己的JavaScript选项(“Web”)不提供缓存存储选项(见下面的2/18更新)。编写该库时假设web浏览器将要连接,因此将存在半持久连接。您可以编写一个本地缓存机制来补充Firebase存储调用,也可以编写本机库和React native库之间的桥梁

2018年2月更新 我找到了一个可以为本机iOS和
store.subscribe(async()=> await AsyncStorage.setItem("store", JSON.stringify(store.getState())))
import SyncStorage from 'sync-storage';

SyncStorage.set('foo', 'bar');
const result = SyncStorage.get('foo');
console.log(result); // 'bar'