Напишите перехватчики с наддувом для своего приложения 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