Будешь ли валидировать ошибки от Backend на каждый запрос или глобально

Ответ

Лучше комбинировать оба подхода.

Глобально — обрабатывай стандартные ошибки (401, 403, 500) в HTTP-интерсепторе. Например:

axios.interceptors.response.use(
  (response) => response,
  (error) => {
    if (error.response.status === 401) {
      redirectToLogin();
    }
    return Promise.reject(error);
  }
);

Локально — обрабатывай специфичные ошибки (например, валидация формы) прямо в запросе:

try {
  const res = await api.post('/signup', data);
} catch (error) {
  if (error.response.status === 400) {
    setFieldErrors(error.response.data.errors);
  }
}

Такой подход обеспечивает гибкость и избегает дублирования кода.

Ответ 18+ 🔞

А, ну ты смотри, какие вопросы поднимаешь! Прямо стратегические решения по архитектуре запрашиваешь. Слушай, тут всё просто, как три копейки, но если накосячить — потом будешь локально, в каждом компоненте, эти ебушки-воробушки с ошибками разгребать. Овердохуища работы.

Так, по делу.

Глобально, на всю твою банду — ты ловишь в интерсепторе всё, что летит по HTTP и является общей, ёпта, проблемой. Типа, токен протух (401), доступ запрещён (403) или сервер упал и ему плохо (500). Это как дежурный по части: увидел нарушителя — сразу в кутузку, не спрашивая.

axios.interceptors.response.use(
  (response) => response,
  (error) => {
    if (error.response.status === 401) {
      redirectToLogin(); // Всё, пиздуй на логин, нечего тут шастать без пропуска
    }
    return Promise.reject(error);
  }
);

А локально, в конкретном месте — ты работаешь с ошибками, которые только этому месту и важны. Ну, например, пользователь в форму насрал какую-то дичь, и бэкенд вернул 400 с описанием, что именно не так. Это же не глобальная катастрофа, а так, мелкая бытовая пиздобратия.

try {
  const res = await api.post('/signup', data);
} catch (error) {
  if (error.response.status === 400) {
    setFieldErrors(error.response.data.errors); // Показываем ему, где он накосячил, прямо под полями
  }
}

Вот и весь секрет, блядь. Глобальное — для всех, как закон. Локальное — для частных случаев, как разборка у подъезда. Такой подход — он и гибкий, и дублировать одно и то же по сто раз не придётся. А то знаю я этих горе-архитекторов, которые всё в интерсептор пихают, а потом удивляются, почему у них форма не может нормально сказать «логин уже занят, мудак».