Напишите перехватчики с наддувом для своего приложения React.

По сути, React - это просто библиотека представлений, которая значительно облегчает вам жизнь по обновлению DOM и управлению состоянием. Он снимает с себя большую часть тяжелой работы по управлению и заботе о части просмотра вашего красивого пользовательского интерфейса.

Я полнофункциональный инженер, постоянно работающий со всеми тремя основными UI-фреймворками JavaScript - Angular, React и Vue.js. Как только я перехожу с одной системы на другую, я чувствую много вещей, которые мне нравятся, а также то, что мне не очень нравится в другой структуре. Но в зависимости от вашего варианта использования - или иногда из-за бизнес-необходимости, обусловленной множеством факторов - вы должны тщательно выбирать свой арсенал.

Angular - это полностью загруженный от батареи фреймворк, за которым следует Vue.js, а затем React, который во многом зависит от множества сторонних библиотек. Но с его популярностью или объявлениями о вакансиях React по-прежнему является крупным победителем в зависимости от того, к какой части мира вы принадлежите.

Как разработчик, в моем сердце очень много места для всех этих фреймворков, и это некоторые удивительные технологии, свидетелями которых мы являемся. Я не буду вдаваться в подробности сравнения этих трех, поскольку в Интернете полно таких статей. Однако я сравню эти 3, чтобы помочь вам выбрать лучшее в зависимости от вашего опыта и вашего варианта использования.

Проблемное пространство

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

Решение

С Angular это просто и добавлено как функция в модуль @ angular / common / http, предоставляемый Angular.

Если это интересно, вы можете следить за ним:



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

Набор инструментов, который мы собираемся использовать:

"axios": "^0.21.1",

Axios - очень широко используемая библиотека, и вы найдете ее интеграцию во многие проекты в Интернете.

Все остальное будет таким же, как и все основные вещи, предлагаемые приложением create-react-app.

В этом уроке для начинающих мы сделаем 2 перехватчика.

Базовая настройка:

import axios from "axios";
import errorInterceptor from "./interceptors/error";
import updateHeaderInterceptor from "./interceptors/updateHeader";
const httpClient = axios.create({
baseURL: process.env.REACT_APP_API_URL,
});
errorInterceptor(httpClient);
updateHeaderInterceptor(httpClient);
export default httpClient;

Вызов вызова:

React.useEffect(() => {
httpClient.get("/");
}, []);

Перехватчик запросов:

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

const updateHeaderInterceptor = (axiosInstance) => {
axiosInstance.interceptors.request.use((config) => {
   const jwtToken = "Bearer Token from Localstorage";
   config.headers["Authorization"] = jwtToken;
   return config;
},(error) => {
   
});
};
export default updateHeaderInterceptor;

Мы можем видеть авторизацию, прикрепленную нашим перехватчиком с этим шаблоном. Мы могли бы добавить наш токен JWT ко всем нашим запросам с помощью всего нескольких строк кода.

Ответный перехватчик:

const DEBUG = process.env.REACT_APP_NODE_ENV !== "production";
const errorInterceptor = (axiosInstance) => {
axiosInstance.interceptors.response.use((response) => {
  //Response Successful
},(error) => {
   if (error?.status?.code === 401) {
     //Unauthorized
     //redirect to Login
   } else {
    //dispatch your error in a more user friendly manner
      if (DEBUG) {
      //easier debugging
      console.group("Error");
      console.log(error);
      console.groupEnd();
     }
  }
});
};
export default errorInterceptor;

Здесь мы видим ошибку нашей группы консоли, поскольку у нас нет серверной части, связанной с нашим пользовательским интерфейсом.

Ближе к концу это был очень простой учебник, и мы могли увидеть потенциал того, сколько мы можем сделать, используя этот шаблон с очень небольшим количеством строк кода. Мы можем управлять всей нашей обработкой ошибок в одном месте и вместе с этим иметь общие шаблоны в их собственных перехватчиках, что делает их очень простыми для понимания и повседневной работы.

Следите за обновлениями реальных проблем и их решений от меня как инженера и архитектора полного цикла. Мир!

Больше контента на plainenglish.io