我的 React Native 应用程序有一个同步存储用例。
在应用程序渲染主视图之前,我想检查本地存储上是否存储了会话令牌,如果可用则继续,否则想要渲染登录组件作为初始视图。
使用同步存储将简化代码。
对于那些正在寻找这个的人, 我发现这个 npm 包可以满足这个需求
如果您使用开发版本,则可以使用 MMKV。它是用 C++ 编写的并且是同步的。
https://github.com/mrousavy/react-native-mmkv#expo
import { MMKV } from 'react-native-mmkv'
export const storage = new MMKV()
设置
storage.set('user.name', 'Marc')
storage.set('user.age', 21)
storage.set('is-mmkv-fast-asf', true)
获取
const username = storage.getString('user.name') // 'Marc'
const age = storage.getNumber('user.age') // 21
const isMmkvFastAsf = storage.getBoolean('is-mmkv-fast-asf') // true
我也有类似的情况,发现Realm支持同步读取,这正是我所需要的。 Realm 对于单个 token 存储来说有点大。我将 AsyncStorage 用于其他所有事情。如果您找到更简单的解决方案,请告诉我。
Android 中没有类似 SharedPreferences 等与 Native Mobile 开发类似的解决方案。
Native Way:大部分操作都是同步的。 (比如从存储中读取等),一些操作是异步的。(http请求,加载图像)
React Native 方式:几乎所有操作都是异步的。 @Ryan Harmuth 的回答解释了这一点。
那么,让我们开始使用 Redux 作为解决方案。 :)
React Native 的设置 API 提供了具有同步读取功能的持久键值数据存储:https://reactnative.dev/docs/settings
但是,该API仅适用于iOS应用程序。这是一个跨平台实现,扩展了对 Android 的支持:https://github.com/alipman88/react-native-cross-platform-settings
正如其他人所指出的,以同步方式将 Android 的 SharedPreferences 包装在本机模块中很困难,但并非不可能。诀窍是覆盖本机
getConstants()
函数并记住结果以供即时查找。 (这种方法的一个缺点是,如果某些外部进程修改了存储的数据,React Native 应用程序在重新启动之前不会知道这些更改 - 但这对于大多数应用程序来说不应该是问题。)