【问题标题】:react-native-storage returning undefined from local storagereact-native-storage 从本地存储返回未定义
【发布时间】:2021-05-10 13:12:33
【问题描述】:

我在执行本地存储操作时遇到了一些困难...

"react-native": "0.64",
"react-native-storage": "^1.0.1"

如标题所示,我正在使用 react-native-storage,并且我创建了两种简单的方法来处理写作和阅读:

import Storage from 'react-native-storage';
import AsyncStorage from '@react-native-community/async-storage';

const storage = new Storage({
  size: 1000,
  storageBackend: AsyncStorage,
  defaultExpires: null,
  enableCache: true,
  sync: {
    return: 'No data.'
  }
});

const saveToLocalStorage = (key: any, data: any) => {
  storage.save({
    key,
    data,
    expires: null
  })
}

const getFromLocalStorage = (key: any) => {
  storage.load({
    key,
    autoSync: true
  })
    .then(data => {
      return { data }
    })
    .catch(err => { });
}

export { saveToLocalStorage, getFromLocalStorage }

如您所见,这几乎是来自https://www.npmjs.com/package/react-native-permissions 的代码示例。

在 App.tsx 文件中,我执行以下操作:

useEffect(() => {
    saveToLocalStorage('test', 'test data');
    const test = getFromLocalStorage('test');
  }, [])

返回undefined

但是如果在方法getFromLocalStorage我替换

.then(data => {
      return { data }
    })

.then(data => console.warn(data));

结果是下面的图像:

简而言之:

  • 如果函数从存储中返回对象,它会带来未定义的。
  • 如果函数从存储中返回一个 console.log,它会带来我在上面写的内容。

【问题讨论】:

    标签: react-native


    【解决方案1】:

    因为return { data } 不是异步函数的有效表达式

    只需使用AsyncStoragereact-native-storage 不需要,除非您同时为移动和网络开发

    useEffect(() => {
        await AsyncStorage.setItem('test', 'myValue');
        const value = await AsyncStorage.getItem('test');
        console.log(value);
      }, [])
    

    【讨论】:

    • 我决定使用 react-native-storage 因为 RN 说 AsyncStorage 已被弃用,如下:reactnative.dev/docs/asyncstorage;但是使用'@react-native-community/async-storage'实际上来自社区哈哈哈,谢谢兄弟
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    • 2020-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-11
    相关资源
    最近更新 更多