Я устанавливаю данные на сервере с помощью 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
. Как это сделать?
2 ответа
U может использовать async
и await
для доступа к значению из AsyncStorage.
async componentDidMount(){
let token = await AsyncStorage.getItem('token');
console.log(token);
}
Я думаю, что ваша проблема связана с асинхронным свойством 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
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.