Настройка Axios в React Native: конфигурация, интерцепторы, типизация

Работа с сетью в React Native часто превращается в рутину: ручные проверки ответов, обработка ошибок, обновление токенов. Мы настраиваем Axios так, чтобы все эти задачи решались автоматически и предсказуемо. Наша команда реализует конфигурацию HTTP-клиента под ключ — с интерцепторами, типизацией и отменой запросов, обеспечивая стабильную работу и последующую поддержку.

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
Настройка Axios в React Native: конфигурация, интерцепторы, типизация
Средний
от 1 дня до 3 дней
Часто задаваемые вопросы

Почему Axios, а не fetch?

В продакшн-приложениях на React Native мы часто сталкиваемся с задачей настройки HTTP-клиента. На первый взгляд, fetch справляется, но в реальных сценариях с авторизацией, таймаутами и отменой запросов он требует лишней обвязки. Axios решает эти проблемы, но его конфигурация должна быть продуманной.

На практике Axios ускоряет разработку в 2 раза: вместо ручной проверки response.ok и парсинга JSON — автоматическая трансформация и встроенная обработка ошибок. В одном из наших проектов (финтех-приложение с 50 000+ пользователей) переход с fetch на Axios сократил количество багов на 30% только за счёт централизованной обработки 401. Кроме того, Axios позволяет задать единый таймаут (например, 10 секунд) и автоматически преобразовывать ответы.

Как настроить автоматическое обновление токена?

Интерцепторы — ключевая фишка Axios. С их помощью мы реализуем бесшовное обновление access-токена при получении 401. Создаём типизированный инстанс:

import axios, { AxiosInstance, InternalAxiosRequestConfig } from 'axios';

const apiClient: AxiosInstance = axios.create({
  baseURL: process.env.API_BASE_URL ?? 'https://api.example.com/v1',
  timeout: 10_000,
  headers: {
    'Content-Type': 'application/json',
  },
});

Теперь добавляем интерцептор запроса, который вставляет Bearer-токен, и интерцептор ответа, который перехватывает 401 и выполняет refresh:

apiClient.interceptors.request.use(
  (config: InternalAxiosRequestConfig) => {
    const token = tokenStore.getAccessToken();
    if (token) config.headers.Authorization = `Bearer ${token}`;
    return config;
  }
);

apiClient.interceptors.response.use(
  (response) => response,
  async (error) => {
    const originalRequest = error.config;
    if (error.response?.status === 401 && !originalRequest._retry) {
      originalRequest._retry = true;
      try {
        const newToken = await tokenStore.refresh();
        originalRequest.headers.Authorization = `Bearer ${newToken}`;
        return apiClient(originalRequest);
      } catch {
        tokenStore.clear();
        navigationRef.navigate('Login');
      }
    }
    return Promise.reject(error);
  }
);

Флаг _retry предотвращает бесконечный цикл — без него при ошибке refresh снова придёт 401. Axios documentation рекомендует такой подход. После успешного refresh оригинальный запрос повторяется с новым токеном.

Пошаговая реализация обновления токена — настройка axios в

  1. Создайте инстанс axios с базовым URL и таймаутом.
  2. В интерцепторе запроса добавьте Bearer-токен из хранилища.
  3. В интерцепторе ответа при 401 без флага _retry выполните refresh.
  4. При успехе обновите заголовок и повторно вызовите apiClient.
  5. При неудаче очистите токены и перенаправьте на логин.
Совет: как обрабатывать ошибки сети

Используйте isAxiosError для проверки типа ошибки. Это позволяет отличать сетевые сбои от ошибок сервера и показывать пользователю понятные сообщения.

Какие проблемы решает правильная настройка Axios?

Корректная конфигурация Axios устраняет сразу несколько типовых проблем. Во-первых, централизованная обработка 401 и 403 — это экономия времени на написании однотипных проверок в каждом запросе. Во-вторых, автоматическая отмена запросов при уходе с экрана снижает нагрузку на память: в одном из проектов это дало 15% прироста производительности при быстрой навигации. В-третьих, типизация ответов через TypeScript отлавливает ошибки на этапе компиляции, сокращая время дебага в 3 раза.

Что входит в настройку Axios под ключ?

Мы предлагаем полную настройку сетевого слоя с передачей документации и код-ревью:

  • создание типизированного API-клиента с единым базовым URL;
  • auth-интерцептор с автоматическим обновлением токена (с флагом _retry);
  • логирование в dev-режиме с помощью AxiosRequestConfig;
  • обработка ошибок (401, network, 500) с кастомными сообщениями;
  • интеграция с React Query или SWR для кэширования и кеш-инвалидации;
  • отмена запросов в useEffect cleanup через AbortController;
  • примеры запросов и тестовые моки.

Результат — стабильный сетевой слой без типовых багов. Закажите настройку Axios под ключ и получите консультацию по вашему проекту.

Как типизировать ответы и отменять запросы?

Типизация ответов отлавливает ошибки на этапе компиляции. Используем дженерики Axios:

interface PaginatedResponse<T> {
  data: T[];
  meta: {
    total: number;
    page: number;
    perPage: number;
  };
}

async function getProducts(page: number): Promise<PaginatedResponse<Product>> {
  const { data } = await apiClient.get<PaginatedResponse<Product>>('/products', {
    params: {
      page,
      per_page: 20,
    },
  });
  return data;
}

Отмена запросов при уходе с экрана экономит память: создаём AbortController и передаём signal в запрос. Вызываем controller.abort() в cleanup useEffect. В одном из проектов это снизило нагрузку на RAM на 15% при быстрой навигации.

Сравнение fetch и Axios

Критерий fetch Axios
Интерцепторы Нет Да
Автоматическая обработка JSON Нужно вызывать .json() Автоматически
Отмена запросов AbortController Поддерживает через signal
Обработка ошибок Проверять response.ok Статус-коды в catch
Установка таймаута Через AbortSignal.timeout Параметр timeout
Типизация в TypeScript Сложно IsAxiosError guard

Типичные ошибки и решения

Ошибка Решение
Использование глобального axios без инстанса Создайте инстанс — это упрощает мокирование и конфигурацию
Отсутствие флага _retry Добавьте флаг — иначе бесконечный цикл refresh
Неотменённые запросы Используйте AbortController в useEffect cleanup
Отсутствие isAxiosError guard Проверяйте тип ошибки через axios.isAxiosError

Больше информации о возможностях Axios — в официальной документации.

Сроки и гарантии

Опыт нашей команды — более 5 лет разработки React Native приложений, реализовали 30+ проектов. Базовая настройка занимает 3–6 часов, интеграция с кэшированием и полноценная обработка ошибок — 1–2 дня. Все работы сопровождаются гарантией стабильной работы и код-ревью. Свяжитесь с нами для точной оценки вашего проекта.

Наши компетенции:

Последние работы

  • Разработка мобильного приложения для компании FEEDME
    Разработка мобильного приложения для компании FEEDME
    1009
  • Разработка мобильного приложения для компании XOOMER
    Разработка мобильного приложения для компании XOOMER
    902
  • Разработка мобильного приложения для компании RHL
    Разработка мобильного приложения для компании RHL
    1331
  • Разработка мобильного приложения для компании ZIPPY
    Разработка мобильного приложения для компании ZIPPY
    1179
  • Разработка мобильного приложения для компании Affhome
    Разработка мобильного приложения для компании Affhome
    1106
  • Разработка мобильного приложения для компании FLAVORS
    Разработка мобильного приложения для компании FLAVORS
    713