Налаштування 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