componentDidMount дает 'Запрос не выполнен с кодом состояния 401' при использовании ax ios .get - PullRequest
0 голосов
/ 28 мая 2020

Привет, я новичок в реагировании на родной язык и node.js Я пытаюсь получить информацию о пользователе из базы данных (mongodb). Когда я использую ax ios .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'];
}

1 Ответ

0 голосов
/ 28 мая 2020

Ваше состояние обновляется не сразу. Причина, по которой он работает в рендере, заключается в том, что повторный рендеринг запускается после запуска 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 });
}

Если вы только делаете вызов здесь, тогда нет необходимости устанавливать состояние.

...