С помощью Axios

При создании интерактивных приложений пользовательский интерфейс всегда является краеугольным камнем. По возможности всегда оставляйте отзывы о действиях пользователя. Один из распространенных случаев отображения индикаторов загрузки происходит при запросе данных с сервера.

Но как вы можете отслеживать ход выполнения ваших запросов на выборку? В этой статье мы рассмотрим, как это легко сделать с помощью Axios.

Настройка проекта

Я использую create-react-app для создания нового проекта React. Чтобы сэкономить время на стилизации всего, я использую этот репозиторий GitHub из моего предыдущего руководства. Он также включает функцию, которая имитирует выполнение сетевого запроса. Позже мы изменим эту функцию, чтобы отслеживать ход выполнения реального сетевого запроса.

Я заменил App.css репозиторием стили в GitHub, а также шаблон внутри App.js:

Я также скопировал содержимое из app.js и добавил функцию загрузки для кнопки. Также сейчас хорошее время для установки нашей единственной зависимости: axios. Запустите npm i axios. Когда все настроено, у вас должно быть то же приложение, что и в связанном репозитории GitHub, за исключением того, что сейчас все находится в React.

Использование хуков для изменения состояния

На данный момент DOM управляется непосредственно из компонента. Чтобы делать что-то в стиле React, давайте изменим состояние на использование хуков. Во-первых, давайте начнем с процента.

Если вас интересует, как хуки работают в React, у меня есть руководство, в котором более подробно рассказывается. Вы можете найти его по ссылке.

Импортируйте useState из React и создайте его экземпляр со значением 0 в строке: 5. Мы можем удалить переменную percentage внутри функции download, а также заменить присвоение в строке: 26 на setPercentage, передав текущий прогресс.

То же самое можно сделать с переключением классов и текста на кнопке. Создайте отдельное состояние для прогресса и повторите те же шаги:

Отслеживание прогресса с помощью Axios

Теперь мы можем начать работу по отслеживанию прогресса. Для этого мы запросим несколько больших изображений. Вытяните axios и внутри своей download функции создайте новый запрос GET.

Axios имеет onDownloadProgress метод конфигурации запроса для обработки хода выполнения запрошенного ресурса. Если вы войдете в консоль, то увидите, что по мере загрузки мы получаем ProgressEvent объект с полезной информацией.

Например, количество загруженных байтов и общий размер запроса. Исходя из этого, мы можем рассчитать ход выполнения запроса. Измените свою download функцию следующим образом:

Код не требует пояснений. Внутри обратного вызова onDownloadProgress мы вычисляем процент и обновляем представление с его помощью. Вы могли заметить, что я избавился от оператора if. (if (progress % 5 === 0) Это необходимо для того, чтобы индикатор выполнения всегда обновлялся при каждом обратном вызове.

Чтобы еще больше замедлить работу, я также включил регулирование на панели «Сеть». Таким образом можно моделировать недорогие устройства. Также для более быстрого подключения вы можете увидеть, что индикатор выполнения мгновенно переходит на 100%. Таким образом, мы сможем убедиться, что мы действительно видим его прогресс. Пришло время проверить это!

Резюме

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

Если вы хотите получить полный исходный код как есть, вы можете клонировать проект из этого репозитория GitHub. Спасибо, что нашли время прочитать эту статью, удачного кодирования!