嗨,我是新来的响应native和node.js的人,我正在尝试从数据库(mongodb)中获取用户信息。当我在渲染器中使用axios.get时,它可以正常工作,但会出现内存错误。所以我使用componentDidMount,但是它给出了“请求失败,状态代码为401”的错误。
async componentDidMount(): void {
AsyncStorage.getItem('x-auth-token').then(x => this.setState({token: x}));
setAuthToken(this.state.token);
await axios.get('http://192.168.1.106:3333/api/auth/')
.then(r => this.setUserInfo(r)).catch(err => console.log(err));
await axios.get('http://192.168.1.106:3333/api/profile/me/')
.then(r => this.setUserProfile(r)).catch(err => console.log(err));
}
setAuthToken:
const setAuthToken=token=>{
if(token){
axios.defaults.headers.common['x-auth-token']=token;
}
else{
delete axios.defaults.headers.common['x-auth-token'];
}
答案 0 :(得分:0)
您的状态不会立即更新。它在渲染中起作用的原因是,在componentDidMount运行并且状态更新后,触发了重新渲染。你应该这样做
async componentDidMount(): void {
const token = await AsyncStorage.getItem('x-auth-token');
setAuthToken(token);
await axios.get('http://192.168.1.106:3333/api/auth/')
.then(r => this.setUserInfo(r)).catch(err => console.log(err));
await axios.get('http://192.168.1.106:3333/api/profile/me/')
.then(r => this.setUserProfile(r)).catch(err => console.log(err));
this.setState({ token });
}
如果您仅在此处拨打电话,则无需设置状态。