首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeError:未定义不是对象(计算'_asyncStorage.AsyncStorage.setItem')

TypeError:未定义不是对象(计算'_asyncStorage.AsyncStorage.setItem')
EN

Stack Overflow用户
提问于 2019-07-30 13:10:35
回答 3查看 11.2K关注 0票数 13

版本:

代码语言:javascript
复制
@react-native-community/async-storage = ^1.6.1

问题:

  1. 像这样导入AsyncStorage:
代码语言:javascript
复制
import { AsyncStorage } from '@react-native-community/async-storage'
  1. 在我的代码中使用如下:
代码语言:javascript
复制
AsyncStorage.setItem('locale', locale)

AsyncStorage.getItem('user').then((value) => 
{
...
}

错误:

  1. TypeError:未定义不是对象(计算'_asyncStorage.AsyncStorage.setItem')
  2. TypeError:未定义不是对象(计算'_asyncStorage.AsyncStorage.getItem')

我试过的

  1. 从“react- AsyncStorage”导入AsyncStorage没有任何问题,只是警告说AsyncStorage应该从‘@react本机-社区’导入,因为从‘react-原生’导入的AsyncStorage是不推荐的。
  2. 尝试卸载并重新安装未能工作的'@react-native-community/async-storage'-dependency,。
  3. 用谷歌搜索

完整代码:

代码语言:javascript
复制
import React from 'react';
import { View, Image, NativeModules } from 'react-native';
import { AsyncStorage } from '@react-native-community/async-storage'
import { styles } from '../../components/Styles.js';
import { GEOLocation } from '../../scripts/GEOLocation';
import Moment from 'moment/min/moment-with-locales';

export default class SplashScreen extends React.Component {


  constructor(props) {
    super(props);
    this.geo = new GEOLocation();
    this.setLocale();
    this.bootstrapAsync();
  }


  bootstrapAsync = async () => {

    this.geo.grantAccess()

    AsyncStorage.getItem('user').then((value) => {
      const user = JSON.parse(value);
      this.props.navigation.navigate(user ? 'App' : 'Auth');
    })
  };

  setLocale = () => {
    const deviceLocale = NativeModules.I18nManager.localeIdentifier
    var locale;

    if (deviceLocale.includes('_')) {
      var language = deviceLocale.split('_')[0]
      var country = deviceLocale.split('_')[1].toLowerCase()

      locale = language + '-' + country
    } else {
      locale = deviceLocale
    }

    if(Moment.locales().indexOf(locale) > -1 ) {
      console.log('device locale')
      AsyncStorage.setItem('locale', locale)
    } else {
      console.log('default locale')
      AsyncStorage.setItem('locale', 'en')
    }
  }


  render() {
    return (
      <View style={styles.container}>
        <Image style={styles.leImage} source={require('../../../assets/logo_icon.png')} />
      </View>
    )
  }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-07-30 13:16:43

下面是如何使用正确的导入方法。

代码语言:javascript
复制
import AsyncStorage from '@react-native-community/async-storage';

此模块不作为react-native导出,因此不能有方括号。

用于react-native模块

代码语言:javascript
复制
import { AsyncStorage } from 'react-native';
票数 40
EN

Stack Overflow用户

发布于 2021-11-23 20:14:11

@react本机-社区/异步存储现在不再受欢迎

使用反应-本机-异步存储/异步存储

而不是。

注:不使用括号。与以前不同的是,它是从react本地导出的许多东西之一,现在它是@react-本机-异步存储/异步存储的默认导出。

代码语言:javascript
复制
import AsyncStorage from '@react-native-async-storage/async-storage';
票数 3
EN

Stack Overflow用户

发布于 2022-09-01 11:46:44

是的,我的问题是通过以下方式解决的

代码语言:javascript
复制
import AsyncStorage from '@react-native-async-storage/async-storage';

在此之前,我使用括号并得到错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57272535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档