现在我想在用户登录成功后保存用户令牌。
这是我的代码:
da.Fill(ds, "tbl_studentData");
我已确保onPress(){
return axios.post('https://api.example.net/v1/user/auth/login', {
email: this.state.email,
password: this.state.password,
}, {
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
},
}).then((response) => {
AsyncStorage.setItem('token', response.data.login._cxz, () => {
console.log('success');
});
this.props.navigator.immediatelyResetRouteStack([{name: 'tweets'}]);
})
.catch((error) => {
this.setState({errorMessage: error.response.data.message});
});
}
有值。
直到这里工作。登录会将我重定向到response.data.login._cxz
路线。
在我的tweets.js上:
tweets
我只是简单 constructor(props){
super(props);
this.state({token : ''});
}
componentWillMount() {
AsyncStorage.getItem('token', (err, value) => {
console.log(value);
})
}
来查看令牌是否已保存。
但每次登录都会完成(显示成功日志)。输入我的推文时我总是遇到这个错误:
任何解决方案?
感谢。
答案 0 :(得分:1)
最有可能发生的是then
回调在navigator.immediatelyResetRouteStack
引发错误:
.then((response) => {
AsyncStorage.setItem('token', response.data.login._cxz, () => {
console.log('success');
});
this.props.navigator.immediatelyResetRouteStack([{name: 'tweets'}]);
})
.catch((error) => {
this.setState({errorMessage: error.response.data.message});
});
然后在catch
块中捕获错误,但由于错误是正常的JavaScript Error
而不是axios错误,因此它没有response
属性,因此尝试访问error.response.data
会导致未定义的错误。
检测错误类型的简单方法是对其进行类型化:如果错误有response
,那么这是一个axios错误,否则会出现另一个错误:
.catch((error) => {
if (error.response && error.response.data) {
this.setState({errorMessage: error.response.data.message});
} else {
this.setState({errorMessage: error.message});
}
});
immediatelyResetRouteStack
引起的错误可能来自在同一个调用堆栈上同步执行的React渲染过程。修复损坏的.catch
后,您将看到错误消息是什么,但对您的有限代码示例中的罪魁祸首的一个好猜测是:
this.state({token : ''});
应该是属性赋值,而不是方法调用:
this.state = {token : ''};