我在React Native领域还是个新手,通常在移动/本地领域也是如此,我发现文档在数据持久性方面有点缺乏。

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

我特别想知道:

数据持久性有哪些不同的选项? 对于每一个,持久性的限制是什么(即,何时数据不再可用)?例如:关闭应用程序时,重启手机时等。 对于每一个,在iOS和Android上的实现有区别吗(除了一般设置)? 离线访问数据的选项比较如何?(或者离线访问通常是如何处理的?) 还有其他需要我考虑的问题吗?

谢谢你的帮助!


当前回答

我们不需要redux-persist,我们可以简单地使用redux持久化。

react-redux + AsyncStorage = redux-persist

在createsotre文件中添加这些行

store.subscribe(async()=> await AsyncStorage.setItem("store", JSON.stringify(store.getState())))

这将在redux存储中有一些变化时更新AsyncStorage。

然后加载json转换的存储。当应用程序加载。并重新设置存储。

因为还原-坚持在使用wix react-native-navigation时会产生问题。如果是这种情况,那么我更喜欢使用简单的redux与上述订阅功能

其他回答

快速和肮脏:只需使用Redux + react-redux + Redux -persist + AsyncStorage for react-native。

它几乎完美地适合react本机世界,工作就像一个迷人的android和ios。此外,它还有一个坚实的社区,以及大量的信息。

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

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

对于react native,您可能希望使用redux和redux-persist。它可以使用多个存储引擎。AsyncStorage和redux- persistent - filessystem -storage是RN的选项。

还有其他选项,如Firebase或Realm,但我从未在RN项目中使用过它们。

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

使用redux + redux-persist,可以定义哪些是持久化的,哪些不是。如果没有持久化,则数据在应用程序运行时存在。当持久化时,数据在应用程序执行(关闭,打开,重启手机等)之间持久化。

AsyncStorage在Android上的默认限制为6MB。可以配置一个更大的限制(在Java代码上)或使用redux- persistent - filessystem -storage作为Android的存储引擎。

对于每一个,在iOS和Android上的实现有区别吗(除了一般设置)?

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

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

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

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

反之亦然。你可以存储数据,你正在发送到服务器,仍然悬而未决,并相应处理它。

还有其他需要我考虑的问题吗?

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

我们不需要redux-persist,我们可以简单地使用redux持久化。

react-redux + AsyncStorage = redux-persist

在createsotre文件中添加这些行

store.subscribe(async()=> await AsyncStorage.setItem("store", JSON.stringify(store.getState())))

这将在redux存储中有一些变化时更新AsyncStorage。

然后加载json转换的存储。当应用程序加载。并重新设置存储。

因为还原-坚持在使用wix react-native-navigation时会产生问题。如果是这种情况,那么我更喜欢使用简单的redux与上述订阅功能

如果你想管理复杂的数据类型,你可以使用Realm或Sqlite。

否则,使用内置的react native asynstorage

上面提到的是正确的存储方法,不过如果你还需要考虑需要存储的任何PII数据,那么你也可以使用https://github.com/oblador/react-native-keychain之类的东西将其隐藏到keychain中,因为ASyncStorage是未加密的。它可以作为redux-persist之类的持久化配置的一部分应用。

您可以使用比异步存储更容易使用的同步存储。 这个库很棒,它使用异步存储来异步保存数据,并使用内存来立即同步加载和保存数据,所以我们将数据异步保存到内存中,并在应用程序同步中使用,这很棒。

import SyncStorage from 'sync-storage';

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