Undefined не является объектом при установке элемента в AsyncStorage - PullRequest
1 голос
/ 07 июля 2019

В моем приложении React Native я хочу сохранить токен в AsyncStorage, но при попытке сделать это выдает следующее предупреждение. Я прошел много SO-ответов относительно проблем такого рода, но не смог придуматьрешение.

enter image description here

RegistrationScreen.js

import React from "react";
import { View } from "react-native";
import { AsyncStorage } from '@react-native-community/async-storage'
import PhoneInput from "react-native-phone-input";
import {
  Button,
  Text,
  Form,
  Item as FormItem,
  Input,
  Label,
} from 'native-base';

export default class Signup extends React.Component {
  static navigationOptions = {
    drawerLabel: "Signup",
  };

  constructor(props) {
    super(props);
    this.state = {
      fname: "",
      mobile: "",
    };

  }

  setToken = async () => {
    //This is where the warning is throws
    await AsyncStorage.setItem('token', 'tokka').then(
      val => {
        if(val) this.props.navigation.navigate('Dashboard')
      }
    )
  }

  render() {
    return (
      <View style={{paddingTop: "40%"}}>
        <Text style={{textAlign: "center",fontSize: 40}}>OnTask</Text>
        <Text style={{fontSize: 20,textAlign: "center"}}>Signup</Text>
        <Form>
        <FormItem>
          <Label>First Name</Label>
          <Input />
        </FormItem>

        <Label style={{marginTop: "3%",marginLeft: "4%"}}>Mobile Number</Label>
          <PhoneInput
          ref="phone"
          style={{
            height: 50,
            padding: 10,            
            width: 300,
            marginLeft: "2%",
            marginBottom: "5%",
            borderRadius: 10
          }}
          onChangePhoneNumber={ number => this.setState({mobile: number})}
/>

        <Button full primary onPress={() => this.setToken()}>
          <Text> Sign Up </Text>
        </Button>

      </Form>
      </View>
    );
  }
}

1 Ответ

2 голосов
/ 07 июля 2019

Проблема в том, что вы неправильно импортируете AsyncStorage. импортируйте AsyncStorage без фигурных скобок.

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

вместо

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

А для лучшей практики используйте попробуй и поймай

setToken = async () => {
  try {
    const val = await AsyncStorage.setItem('token', 'tokka');
    if(val) this.props.navigation.navigate('Dashboard')
  } catch (e) {
    console.log('error', e.message);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...