Возможный необработанный отказ от обещания (id: 0): ReferenceError: пользователь не определен ReferenceError: пользователь не определен - PullRequest
0 голосов
/ 29 июня 2018

Я сохранил данные пользователя с помощью AsyncStorage, когда я хочу получить его, он выводит ноль в оповещении и вышеупомянутую ошибку в консоли, я не знаю, почему.
Я не могу понять, почему он возвращает ноль с пользователем, но токен все хорошо

profile.js:

  import React, {Component} from 'react';
  import { StyleSheet, Text, View, Image, TouchableOpacity,AsyncStorage} 
  from 'react-native';
  import { Container, Content, Header,Right, Left, Body} from 'native- 
  base';
  import Feather from 'react-native-vector-icons/Feather';
  export default class Profile extends Component {
  constructor (props){
    super(props);
    this.state = {
       user: null
    }
  }
  componentDidMount(){
     this.fetchData();
  }
  fetchData = async() =>{
      let username = await  AsyncStorage.getItem('user')
     this.setState({
            user: username
        })
         alert(user)
         console.log(user)
     };
  render(){return (....)} 

здесь, когда я храню данные пользователя и токен.
Signin.js:

 signInMethod =  () => {
this.setState({
  showProgress : true
});
return fetch(url, {
  method: "POST",
  headers: {
    'Accept': "application/json",
    'Content-Type': "application/json",
  },
  body : JSON.stringify({
    email : this.state.userEmail,
    password : this.state.userPassword
  })
  })
  .then((response) => response.json())
  .then((res) => {
    //if there was an error 
    if(res.error){
      //Alert.alert("رسالة","المرجو التأكد من صحة البيانات");
      this.setState({
        error: 'المرجو التأكد من صحة البيانات'
      });
      return;
    }
    //if there was no error then store the jwt in the localstorage
    this.setState({
      customerData : res.customer
    });
    if (this.state.customerData && res.token) {
    //we store the user data to be used localy
     AsyncStorage.setItem('user',JSON.stringify(res.customer));
    AsyncStorage.setItem('jwt', res.token);
      AsyncStorage.getItem('user');
      updateLogin(res.token);
       this.props.navigation.navigate('Home');
    }
   })
  .catch((err) => {
    Alert.alert("المرجو اعادة المحاولة لاحقا");
  })
  }    

помогите пожалуйста.

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Я решаю проблему:
profile.js:

    fetchData = async() =>{

    let  userData = await AsyncStorage.getItem('user', (value) => {
         JSON.parse(value);
     });
     //console.log(userData)
        this.setState({
               user: userData
           })   
alert(this.state.user)     
 //console.log(this.state.user.name);
}  

проблема в том, что я нахожу сейчас, когда я хочу показать данные пользователя, такие как имя, адрес электронной почты ...

<Text>{this.state.user.name}<Text>

Я получаю эту ошибку: Невозможно прочитать свойство 'name' из null

0 голосов
/ 29 июня 2018

Вы делаете это неправильно.

Если вам нужно распечатать имя пользователя, вам нужно будет console.log(username).

То же самое относится к alert.

И если вы хотите распечатать состояние, оно не будет отображать никаких выходных данных, потому что setState({}) вызовы функций являются пакетными, и результат будет виден вам только в следующих render()

Например

render() {
    console.log(this.state.username); return(...)}

Надеюсь, что это ответы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...