React-native同步存储解决方案

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

在原生 iOS 代码中,我可以使用

NSUserDefaults
来存储和获取数据,这是同步操作。在react-native中,提供的是使用
AsyncStorage
,但我需要一个同步存储的解决方案,例如
NSUserDefaults
。 我将使用数据获取的结果来确定要显示哪个屏幕,但由于它是异步的,因此在尝试获取持久数据时我总是会遇到未定义的情况。

react-native asyncstorage
3个回答
6
投票

打电话后

AsyncStorage.getItem('@MySuperStore:key');

react-native 将在其他线程中调用依赖于您的平台的本机函数 然后它会返回一个解决它的承诺 ,所以如果像这样打电话

  let value =  AsyncStorage.getItem('@MySuperStore:key');
   value ++;

您的值无效,因为数据稍后可用
正确的做法是:

try {
  const value = await AsyncStorage.getItem('@MySuperStore:key');
  if (value !== null){
    // We have data!!
    console.log(value);
  }
} catch (error) {
  // Error retrieving data
}

这样做的另一种方法是

  try {
      AsyncStorage.getItem('@MySuperStore:key',(value )=>{  
      if (value !== null){
        // We have data!!
    console.log(value);
  }});

} catch (error) {
  // Error retrieving data
}

1
投票

例如,您可以使其异步

   getData = async () => {
       const value = await AsyncStorage.getItem('Yourkey');
        this.setState({key: value})

  }

0
投票

React Native 提供了一个封装 NSUserDefaults 的 Settings API,充当具有同步读取功能的持久键值数据存储:https://reactnative.dev/docs/settings

但是,该 API 仅适用于 iOS – 对于那些寻求跨平台功能的人,这里有一个 NPM 包将支持扩展到 Android:https://github.com/alipman88/react-native-cross-platform-settings?选项卡=自述-ov-文件

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