我对道具导航有疑问,我想知道如果条件为真,如何导航其他屏幕?我有用户需要登录的模块,我正在使用ReactJS api。展望未来,我可以在api中获得正确的响应,但是if语句中存在一个问题,即我的道具未定义不是对象。
我这里有我编写的代码,
AsyncStorage.getItem('authorization_code', (err, result) => {
let token = result;
axios({
method: 'post',
url: 'http://1xx.xx.x.xx:8002/api/auth/me?token=',
headers: {"Authorization" : `Bearer ${token}`}
}).then(response => {
const email = response.data.email;
const user_type = response.data.user_type;
AsyncStorage.setItem('USERMAIL',email.toString());
AsyncStorage.setItem('USERTYPE',user_type.toString());
if(user_type == 1) {
this.props.navigation.push('Dashboard');
}
else if(user_type == 3) {
this.props.navigation.push('Dashboard');
}
})
});
谢谢。
答案 0 :(得分:1)
这是因为您正在访问另一个closure中的this
。要解决此问题,您可以存储局部变量并从传递给then
的函数中访问它。常见的约定是使用要持久化到闭合的that
来创建一个名为this
的新变量。
getItemFromStorage() {
// this line is the key
const that = this;
AsyncStorage.getItem('authorization_code', (err, result) => {
let token = result;
axios({
method: 'post',
url: 'http://1xx.xx.x.xx:8002/api/auth/me?token=',
headers: {"Authorization" : `Bearer ${token}`}
}).then(response => {
const email = response.data.email;
const user_type = response.data.user_type;
AsyncStorage.setItem('USERMAIL',email.toString());
AsyncStorage.setItem('USERTYPE',user_type.toString());
// now you can access that to obtain the props
if(user_type == 1) {
that.props.navigation.push('Dashboard');
}
else if(user_type == 3) {
that.props.navigation.push('Dashboard');
}
})
});
}
有关此here
的更多信息