Я устанавливаю данные на сервере с помощью AsyncStorage.setItem и пытаюсь получить доступ к этому значению на другом экране с помощью AsyncStorage.getItem. 1. Я не могу установить token в AsyncStorage. 2. Как мне установить несколько значений в asyncstorage, скажем, я хочу, чтобы user_id из ответа сервера устанавливался вместе с этим token?

onPressRegister(){

            fetch('http://192.168.1.7:3000/users/registration',{
                method:'POST',
                headers:{
                    'Accept': 'applictaion/json',
                    'Content-Type': 'application/json',

                },
                body:JSON.stringify({
           contact:this.state.contact,
                     password:this.state.password,
                })
            })
            .then((response) => response.json())
            .then((responseData) =>
            {
                 this.setState({
                     signup: responseData
                 });
                 setTimeout(() => {
                    Actions.firstScreen();
                }, 2300);

        AsyncStorage.setItem('token' ,this.state.signup.token);
            });

    }

И я получаю вот так

  componentDidMount(){
    AsyncStorage.getItem('token').then((userid) =>{
    this.setState({'userid': userid});
    console.log(userid);
    });
}

Но я не вижу результата в console ничего не получается. Есть ли ошибка в AsyncStorage.setItem? Кроме того, ответ сервера выглядит так

{ error: 0,
  data: 'User registered Successfully',
  userData:
   { pwd: 'vgh',
     phone_no: '5',
     user_name: '',
     status: 1,
     date: 2018-10-23T09:23:53.671Z },
  user_id: [  { user_id: 5 } ],
  token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9' }

Также я хочу, чтобы user_id был установлен в AsyncStorage. Как это сделать?

0
Linu Sherin 23 Окт 2018 в 12:33

2 ответа

Лучший ответ

U может использовать async и await для доступа к значению из AsyncStorage.

async componentDidMount(){
    let token = await AsyncStorage.getItem('token');
    console.log(token);
}
1
Asif vora 23 Окт 2018 в 10:14

Я думаю, что ваша проблема связана с асинхронным свойством setState.

Если ваш responseData является объектом (проверьте его с помощью console.log (typeof responseData), попробуйте:

AsyncStorage.setItem('token' , responseData.token);

Действительно, для того, чтобы метод setState стал эффективным, требуется время. React native устанавливает состояние, когда это лучший момент, а не когда вы пишете его в своем коде (функция async). Это не похоже на набор переменных ..

Еще нужно знать, когда вы вызываете getItem. Если вы вызываете его сразу после setItem (или даже после перехода на другой экран), он не может быть уже установлен (та же причина async). Затем вы можете сделать это, чтобы убедиться, что ваш элемент установлен:

AsyncStorage.setItem('token' , responseData.token, () => { ...the next instructions (like navigation function) }); 

Это обратный вызов, вызываемый в конце метода setItem

0
guillaume piedigrossi 23 Окт 2018 в 09:52
52945727