При создании экземпляра Axios, как присвоить значение из асинхронного хранилища в моем случае

#react-native #axios #asyncstorage

#react-native #axios #asyncstorage

Вопрос:

В моем проекте react native я использую async-storage для хранения токена авторизации. Я использую Axios как клиентскую библиотеку HTTP, когда я настраиваю заголовок, я хотел бы использовать пустую строку в качестве значения для заголовка Authorization , если в нем не хранится значение AsyncStorage . В противном случае используйте значение из хранилища.

Ниже приведен код, который я пробовал, но я застрял на том, как поместить код для извлечения значения из хранилища, поскольку это await вызов. Я не могу выразить это так, как сейчас, жалуется компилятор. Но экспортируемый Axios является объектом в файле. Итак, есть предложения?

 import AsyncStorage from '@react-native-community/async-storage';
import {STORAGE_KEYS} from '../constants';

// I can't put this line here
const myToken = await AsyncStorage.getItem(STORAGE_KEYS.MyToken);

export default Axios.create({
  baseURL: 'http://192.168.10.207:3000',
  headers: {
    Authorization: myToken ? myToken : '',
  },
});
  

Ответ №1:

Перехватчики Axios

Одним из решений было бы использовать Interceptors : https://github.com/axios/axios#interceptors

 import AsyncStorage from '@react-native-community/async-storage';
import {STORAGE_KEYS} from '../constants';
import axios from 'axios;

const instance = return axios.create({ baseURL: 'http://192.168.10.207:3000' });

instance.interceptors.request.use(async function (config) {

  const myToken = await AsyncStorage.getItem(STORAGE_KEYS.MyToken);
  config.headers['Authorization'] = myToken ? myToken : '';
  return config;

});

export default instance; 

  

(не тестировалось)

Комментарии:

1. Спасибо, так ли это, что в строке кода при создании instance я также могу объявлять заголовки с жестко заданными значениями, а затем использовать перехватчик для добавления новых заголовков?

2. Да, вы можете! Насколько я понимаю, вы можете полностью изменить весь запрос с помощью перехватчиков! Дайте мне знать, если у вас возникнут проблемы с этим…