是否有一个简单的React Native同步存储选项?

问题描述 投票:0回答:6

我的 React Native 应用程序有一个同步存储用例。

在应用程序渲染主视图之前,我想检查本地存储上是否存储了会话令牌,如果可用则继续,否则想要渲染登录组件作为初始视图。

使用同步存储将简化代码。

react-native
6个回答
10
投票

我认为没有简单的同步存储选项。根据 this 答案 localstorage 没有在核心 IOS javascript 引擎中实现。 AFAIK 其他选项(例如 this localstorage polyfill 中使用的选项)不起作用。这使得我们需要一个设计上异步的 React Native 模块。来自文档

React Native 桥是异步的,因此将结果传递给 JavaScript 的唯一方法是使用回调或发出事件

所以我认为异步是最佳选择。


3
投票

对于那些正在寻找这个的人, 我发现这个 npm 包可以满足这个需求

反应本机同步本地存储


3
投票

如果您使用开发版本,则可以使用 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

1
投票

我也有类似的情况,发现Realm支持同步读取,这正是我所需要的。 Realm 对于单个 token 存储来说有点大。我将 AsyncStorage 用于其他所有事情。如果您找到更简单的解决方案,请告诉我。


0
投票

Android 中没有类似 SharedPreferences 等与 Native Mobile 开发类似的解决方案。

Native Way:大部分操作都是同步的。 (比如从存储中读取等),一些操作是异步的。(http请求,加载图像)

React Native 方式:几乎所有操作都是异步的。 @Ryan Harmuth 的回答解释了这一点。

那么,让我们开始使用 Redux 作为解决方案。 :)


0
投票

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 应用程序在重新启动之前不会知道这些更改 - 但这对于大多数应用程序来说不应该是问题。)

© www.soinside.com 2019 - 2024. All rights reserved.