
Книга посвящена программированию веб-приложений на языке JavaScript с применением популярного веб-фреймворка React. Дается вводный курс, наглядно, по шагам описывающий разработку несложного веб-приложения — списка запланированных дел. Описываются базовые инструменты: создание и настройка React-проекта, написание компонентов, язык JSX, передача данных между компонентами и создание веб-форм. Рассматриваются полезные дополнительные библиотеки: React Router (навигация), Redux, React Redux и Redux Toolkit (централизованное хранилище данных), Formik (быстрая разработка веб-форм), Yup (валидация), React Reveal (анимационные эффекты) и др. Рассказывается о разделении кода, обработке ошибок, средствах отладки, публикации готового веб-приложения и рендеринге на стороне сервера.
Электронный архив на сайте издательства содержит код описанного в книге веб-приложения и другие полезные файлы.
Для программистов
Простота и скорость клиентской веб-разработки
Книга посвящена разработке веб-приложений на языке JavaScript с применением популярного клиентского веб-фреймворка React 19. В ней учтены все нововведения, появившиеся в React 19 и новых версиях сопутствующих библиотек.
Дается вводный курс для новичков в React, содержащий пошаговое описание разработки несложного веб-приложения — списка планируемых дел.
Описываются базовые инструменты и приемы React-программирования: создание и настройка проекта React-приложения, написание компонентов, обработка событий, передача данных между компонентами, программирование веб-форм и компоненты высшего порядка.
Рассматриваются дополнительные библиотеки, которые пригодятся любому React-разработчику: React Router (навигация), Redux (централизованное хранилище данных), React Redux и Redux Toolkit (упрощение разработки и использования централизованного хранилища), Formik (быстрая разработка веб-форм), Yup (валидация введенных данных), React Awesome Reveal (создание анимационных эффектов) и др.
Далее ведется рассказ о работе с метаданными, разделении кода, обработке ошибок, отладочных инструментах (включая расширения веб-обозревателя React Developer Tools и Redux DevTools), публикации готового веб-приложения с использованием веб-серверов Apache HTTP Server и serve.
- Новинки React 19 и сопутствующих библиотек
- Компоненты
- Работа с бэкендом
- Веб-формы
- Навигация
- Загрузчики и воздействия
- Фетчеры данных
- Redux
- Анимация
- Работа с метатегами
- Публикация
Книгу “React 19. Разработка веб-приложений на JavaScript” можно купить со скидкой в интернет-магазине издательства “БХВ“.
Предисловие…………………………………………………………………………………………… 13
Веб-сайты третьего поколения. Фронтенды и бэкенды………………………………………………………….. 13
Проблемы с программированием фронтендов………………………………………………………………………… 14
Клиентские веб-фреймворки решат все проблемы…………………………………………………………………. 14
Веб-фреймворк React — почему именно он?…………………………………………………………………………… 15
Что содержится в этой книге?…………………………………………………………………………………………………… 15
Что нового?…………………………………………………………………………………………………………………………………. 16
Необходимые знания и навыки………………………………………………………………………………………………… 17
Использованное ПО…………………………………………………………………………………………………………………… 17
Типографские соглашения………………………………………………………………………………………………………… 17
Часть I. Создание простейшего React-приложения……….. 21
Глава 1. Список планируемых дел 1.0……………………………………………………. 22
1.1. Создание проекта todos……………………………………………………………………………………………………… 22
Теория………………………………………………………………………………………………………………………………………. 22
Практика………………………………………………………………………………………………………………………………….. 22
1.2. Запуск и остановка проекта………………………………………………………………………………………………. 24
1.3. Введение в компоненты. JSX………………………………………………………………………………………………. 25
Теория………………………………………………………………………………………………………………………………………. 25
Практика………………………………………………………………………………………………………………………………….. 26
1.4. Вывод компонентов. Пропы и спуск данных……………………………………………………………………. 31
Теория………………………………………………………………………………………………………………………………………. 31
Практика………………………………………………………………………………………………………………………………….. 32
1.5. Подъем данных и обработка событий………………………………………………………………………………. 36
Теория………………………………………………………………………………………………………………………………………. 36
Практика………………………………………………………………………………………………………………………………….. 36
1.6. Состояния компонента. Реактивные данные……………………………………………………………………. 38
Теория………………………………………………………………………………………………………………………………………. 38
Практика………………………………………………………………………………………………………………………………….. 38
1.7. Работа с веб-формами………………………………………………………………………………………………………… 41
1.8. Навигация. Библиотека React Router. Маршрутизатор, маршрут и выпуск…………………. 46
Теория………………………………………………………………………………………………………………………………………. 46
Практика………………………………………………………………………………………………………………………………….. 46
1.9. Загрузчики и воздействия React Router. Перенаправление…………………………………………….. 53
Теория………………………………………………………………………………………………………………………………………. 53
Практика………………………………………………………………………………………………………………………………….. 54
1.10. Параметризованные маршруты………………………………………………………………………………………. 58
Теория………………………………………………………………………………………………………………………………………. 58
Практика………………………………………………………………………………………………………………………………….. 58
1.11. Вывод сообщения об ошибке 404……………………………………………………………………………………. 64
Глава 2. Список планируемых дел 2.0……………………………………………………. 67
2.1. Создание базы данных Google Firebase и подготовка приложения к работе с ней……….. 67
2.2. Регистрация новых посетителей………………………………………………………………………………………… 77
2.3. Вход и выход……………………………………………………………………………………………………………………….. 84
2.4. Хранение данных в базе Google Firebase…………………………………………………………………………… 87
Теория………………………………………………………………………………………………………………………………………. 87
Практика………………………………………………………………………………………………………………………………….. 88
2.5. Разграничение доступа………………………………………………………………………………………………………. 94
2.6. Валидация и вывод сообщений об ошибках в стиле React…………………………………………….. 96
Теория………………………………………………………………………………………………………………………………………. 96
Практика………………………………………………………………………………………………………………………………….. 96
Часть II. Базовые инструменты………………………………………………. 101
Глава 3. Проект React-приложения………………………………………………………. 102
3.1. Создание React-проекта…………………………………………………………………………………………………… 102
3.2. Структура React-проекта…………………………………………………………………………………………………. 103
3.3. Базовые файлы проекта……………………………………………………………………………………………………. 106
3.3.1. Веб-страница приложения…………………………………………………………………………………………. 106
3.3.2. Стартовый модуль………………………………………………………………………………………………………. 108
3.3.3. Таблица стилей приложения……………………………………………………………………………………… 109
3.3.3.1. Сброс стилей………………………………………………………………………………………………………. 109
3.3.3.2. Использование таблиц стилей SASS………………………………………………………………… 110
3.4. Запуск и остановка выполнения проекта……………………………………………………………………….. 110
3.4.1. Отслеживание кода…………………………………………………………………………………………………….. 112
3.4.2. Использование HTTPS при отладке………………………………………………………………………….. 112
3.5. Выявление ошибок……………………………………………………………………………………………………………. 113
3.5.1. Ошибки в программном коде……………………………………………………………………………………… 113
3.5.2. Ошибки времени выполнения…………………………………………………………………………………….. 114
3.6. Настройка проекта. Переменные окружения…………………………………………………………………. 114
3.6.1. Задание переменных окружения. Файлы окружения………………………………………………. 115
3.6.2. Использование переменных окружения в программном коде………………………………… 116
3.6.3. Переменные окружения, поддерживаемые React…………………………………………………….. 116
3.6.4. Создание своих переменных окружения…………………………………………………………………… 119
Глава 4. Компоненты…………………………………………………………………………… 120
4.1. Реализация компонентов………………………………………………………………………………………………….. 120
4.1.1. Жизненный цикл компонента. Хуки………………………………………………………………………….. 121
4.1.2. Пропы компонента……………………………………………………………………………………………………… 122
4.1.3. Рендеринг компонента………………………………………………………………………………………………… 124
4.1.3.1. Объектное описание содержимого компонента. Фрагменты…………………………. 124
4.1.3.2. Разделение кода, выполняющего рендеринг…………………………………………………… 126
4.1.3.3. Предотвращение рендеринга……………………………………………………………………………. 127
4.1.3.4. Рендеринг произвольного содержимого………………………………………………………….. 127
4.1.3.4.1. Рендеринг содержимого в одном месте компонента-родителя……………….. 127
4.1.3.4.2. Рендеринг содержимого в разных местах компонента-родителя.
Слоты……………………………………………………………………………………………………………………………. 128
4.1.3.4.3. Инструменты для работы с коллекцией потомков……………………………………. 129
4.1.4. Состояния компонента……………………………………………………………………………………………….. 131
4.1.4.1. Состояние компонента: момент первый………………………………………………………….. 132
4.1.4.2. Состояние компонента: момент второй…………………………………………………………… 133
4.1.4.3. Как состояния связываются с компонентами?………………………………………………… 134
4.2. Дополнительные инструменты для написания компонентов……………………………………….. 135
4.2.1. Управление элементами веб-страниц. Рефы…………………………………………………………….. 136
4.2.1.1. Объектные рефы…………………………………………………………………………………………………. 136
4.2.1.2. Функциональные рефы……………………………………………………………………………………… 137
4.2.2. Порталы……………………………………………………………………………………………………………………….. 139
4.2.3. Принудительное обновление компонента………………………………………………………………… 141
4.2.4. Генерирование уникальных якорей………………………………………………………………………….. 141
4.3. Повышение производительности компонентов. Мемоизация………………………………………. 142
4.3.1. Мемоизация компонентов………………………………………………………………………………………….. 142
4.3.2. Мемоизация результатов вычислений………………………………………………………………………. 144
Глава 5. Язык JSX………………………………………………………………………………… 146
5.1. Основы JSX………………………………………………………………………………………………………………………… 146
5.1.1. Синтаксис JSX……………………………………………………………………………………………………………… 146
5.1.1.1. Указание типа выводимого элемента во время выполнения………………………….. 149
5.1.2. Вывод значений…………………………………………………………………………………………………………… 150
5.1.3. Условный вывод………………………………………………………………………………………………………….. 151
5.1.4. Вывод последовательностей……………………………………………………………………………………… 152
5.1.4.1. Ключи…………………………………………………………………………………………………………………. 152
5.2. Использование в компонентах внедренных элементов…………………………………………………. 153
5.3. Оформление компонентов………………………………………………………………………………………………… 154
5.3.1. Таблицы стилей компонентов……………………………………………………………………………………. 154
5.3.1.1. CSS-модули………………………………………………………………………………………………………… 155
5.3.2. Задание встроенных стилей CSS……………………………………………………………………………….. 156
Глава 6. Обработка событий………………………………………………………………… 157
6.1. Написание обработчиков событий…………………………………………………………………………………. 157
6.2. Привязка обработчиков к событиям……………………………………………………………………………….. 158
6.2.1. Передача параметров обработчикам событий………………………………………………………… 159
6.3. События, поддерживаемые React. Класс события React………………………………………………. 159
6.4. Фазы событий в React………………………………………………………………………………………………………. 161
6.4.1. Обработка событий на фазе погружения………………………………………………………………….. 162
Глава 7. Взаимодействие между компонентами……………………………………. 164
7.1. Передача данных……………………………………………………………………………………………………………… 164
7.1.1. Спуск данных………………………………………………………………………………………………………………. 164
7.1.1.1. Спуск данных посредством пропов. Простой и сквозной спуск……………………. 164
7.1.1.2. Спуск данных посредством контекстов…………………………………………………………… 166
7.1.2. Подъем данных……………………………………………………………………………………………………………. 170
7.1.2.1. Мемоизация функций, передаваемых потомкам…………………………………………….. 171
7.2. Передача функциональности. Рендер-пропы…………………………………………………………………. 172
7.3. Передача управления……………………………………………………………………………………………………….. 174
7.3.1. Перенаправление рефов……………………………………………………………………………………………… 174
7.3.2. Использование промежуточных обработчиков……………………………………………………….. 175
Глава 8. Работа с веб-формами и элементами управления……………………. 177
8.1. Работа с элементами управления……………………………………………………………………………………. 177
8.2. Работа с веб-формами………………………………………………………………………………………………………. 179
8.2.1. Обработка события submit веб-формы……………………………………………………………………… 179
8.2.2. Использование воздействий React…………………………………………………………………………….. 180
8.2.2.1. Упрощенные воздействия React……………………………………………………………………….. 180
8.2.2.1.1. Получение сведений о веб-форме………………………………………………………………. 182
8.2.2.2. Полнофункциональные воздействия React……………………………………………………… 183
8.3. Валидация заносимых данных………………………………………………………………………………………… 185
Глава 9. Работа с внешними API………………………………………………………….. 187
9.1. Использование эффектов React……………………………………………………………………………………….. 187
9.1.1. Эффекты, вызываемые перед рендерингом компонента………………………………………….. 187
9.1.2. Эффекты, вызываемые после рендеринга компонента……………………………………………. 190
9.1.3. Эффекты, служащие для взаимодействия с внешним хранилищем данных………….. 191
9.2. Поддержка асинхронных операций………………………………………………………………………………… 192
9.2.1. Приостановщик…………………………………………………………………………………………………………… 192
9.2.2. Низкоприоритетные обновления компонента………………………………………………………….. 194
9.2.2.1. Упрощенные низкоприоритетные обновления……………………………………………….. 195
9.2.2.2. Полнофункциональные низкоприоритетные обновления……………………………… 197
9.2.3. Величины с отложенным изменением……………………………………………………………………….. 198
9.2.4. Оптимистичное обновление компонентов………………………………………………………………… 199
Глава 10. Компоненты высшего порядка и собственные хуки…………….. 202
10.1. Компоненты высшего порядка………………………………………………………………………………………. 202
10.1.1. Компонент высшего порядка, пример 1………………………………………………………………….. 202
10.1.2. Компонент высшего порядка, пример 2………………………………………………………………….. 204
10.2. Написание собственных хуков……………………………………………………………………………………… 207
Часть III. Дополнительные библиотеки
и расширенные инструменты………………………………………………… 209
Глава 11. Библиотека React Router: навигация, раздел 1……………………… 210
11.1. Основные принципы и понятия React Router……………………………………………………………….. 210
11.2. Маршруты, списки маршрутов и маршрутизаторы……………………………………………………. 212
11.2.1. Маршрут……………………………………………………………………………………………………………………. 212
11.2.1.1. Написание шаблонных путей. Запись URL-параметров…………………………….. 213
11.2.2. Список маршрутов……………………………………………………………………………………………………. 214
11.2.2.1. Создание списка маршрутов………………………………………………………………………….. 214
11.2.2.2. Две разновидности списка маршрутов………………………………………………………….. 214
11.2.2.2.1. Простой список маршрутов……………………………………………………………………… 214
11.2.2.2.2. Иерархический список маршрутов………………………………………………………….. 215
11.2.3. Выпуск……………………………………………………………………………………………………………………….. 218
11.2.4. Маршрутизаторы……………………………………………………………………………………………………… 218
11.2.4.1. Маршрутизатор Browser Router……………………………………………………………………… 218
11.2.4.2. Маршрутизатор Hash Router………………………………………………………………………….. 219
11.2.5. Провайдер маршрутизации……………………………………………………………………………………… 220
11.3. Навигация………………………………………………………………………………………………………………………… 220
11.3.1. Гиперссылки……………………………………………………………………………………………………………… 221
11.3.1.1. Упрощенные гиперссылки………………………………………………………………………………. 221
11.3.1.1.1. Написание путей в гиперссылках……………………………………………………………. 222
11.3.1.2. Полнофункциональные гиперссылки…………………………………………………………….. 223
11.3.2. Перенаправление………………………………………………………………………………………………………. 225
11.4. Получение сведений о текущем интернет-адресе………………………………………………………… 226
11.4.1. Получение значений URL-параметров…………………………………………………………………… 226
11.4.2. Получение и изменение значений GET-параметров………………………………………………. 227
11.4.3. Получение текущего местоположения……………………………………………………………………. 228
11.5. Дополнительные программные инструменты React Router……………………………………….. 229
11.5.1. Разметочные маршруты…………………………………………………………………………………………… 229
11.5.2. Обработка события beforeunload окна…………………………………………………………………… 229
11.5.3. Блокировка ухода…………………………………………………………………………………………………….. 230
11.5.4. Проверка пути…………………………………………………………………………………………………………… 232
11.5.5. Задание маршрутов в виде простых объектов……………………………………………………….. 233
Глава 12. Библиотека React Router: навигация, раздел 2……………………… 235
12.1. Загрузка и отправка данных………………………………………………………………………………………….. 235
12.1.1. Загрузка данных. Загрузчики………………………………………………………………………………….. 235
12.1.1.1. Написание загрузчиков…………………………………………………………………………………… 235
12.1.1.1.1. Перенаправление в загрузчиках………………………………………………………………. 236
12.1.1.2. Указание загрузчика в маршруте…………………………………………………………………… 237
12.1.1.3. Получение результата, возвращенного загрузчиком…………………………………… 237
12.1.2. Отправка данных. Воздействия React Router…………………………………………………………. 238
12.1.2.1. Написание воздействий React Router…………………………………………………………….. 238
12.1.2.2. Указание воздействия React Router в маршруте…………………………………………… 239
12.1.2.3. Инициирование запуска воздействия React Router………………………………………. 239
12.1.2.3.1. Запуск воздействия из веб-формы……………………………………………………………. 239
12.1.2.3.2. Программный запуск воздействия……………………………………………………………. 241
12.1.2.4. Получение результата, возвращенного воздействием React Router…………… 243
12.1.3. Фетчеры……………………………………………………………………………………………………………………… 243
12.1.3.1. Создание фетчеров………………………………………………………………………………………….. 243
12.1.3.2. Загрузка данных с помощью фетчеров………………………………………………………….. 244
12.1.3.3. Отправка данных с помощью фетчера………………………………………………………….. 245
12.1.3.3.1. Отправка данных посредством веб-формы фетчера………………………………. 245
12.1.3.3.2. Упрощенный способ отправки данных фетчером из веб-формы………….. 246
12.1.3.3.3. Программная отправка данных фетчером………………………………………………. 246
12.1.3.4. Доступ к произвольному фетчеру………………………………………………………………….. 247
12.1.3.5. Получение сведений обо всех созданных в приложении фетчерах……………. 248
12.2. Поддержка асинхронных операций в React Router…………………………………………………….. 248
12.3. Получение сведений о совпавших маршрутах и самом маршрутизаторе………………… 251
12.3.1. Получение сведений о совпавших маршрутах………………………………………………………. 251
12.3.2. Получение сведений о самом маршрутизаторе……………………………………………………… 252
12.4. Передача произвольного значения целевому компоненту через маршрут……………….. 253
12.5. Сохранение позиции прокрутки……………………………………………………………………………………. 255
Глава 13. Преобразователи данных React…………………………………………….. 257
13.1. Влияния……………………………………………………………………………………………………………………………. 257
13.2. Создание преобразователя React………………………………………………………………………………….. 258
13.2.1. Написание преобразователя React…………………………………………………………………………. 258
13.2.2. Регистрация преобразователя React……………………………………………………………………….. 259
13.3. Работа с преобразователями React………………………………………………………………………………. 260
Глава 14. Библиотека Redux: централизованное хранение состояния, раздел 1 262
14.1. Библиотека Redux…………………………………………………………………………………………………………… 262
14.1.1. Влияния……………………………………………………………………………………………………………………… 263
14.1.2. Преобразователь Redux…………………………………………………………………………………………… 264
14.1.3. Хранилище………………………………………………………………………………………………………………… 265
14.1.4. Селекторы………………………………………………………………………………………………………………….. 266
14.1.5. Получение данных из хранилища…………………………………………………………………………… 267
14.1.6. Отправка влияний……………………………………………………………………………………………………… 267
14.1.7. Регистрация слушателей………………………………………………………………………………………….. 268
14.1.8. Создатели влияний……………………………………………………………………………………………………. 269
14.1.9. Отправители влияний……………………………………………………………………………………………….. 270
14.1.10. Специфические случаи применения Redux………………………………………………………….. 271
14.1.10.1. Составные преобразователи………………………………………………………………………… 271
14.1.10.2. Замена преобразователя………………………………………………………………………………. 273
14.1.10.3. Мемоизация селекторов. Библиотека Reselect……………………………………………. 273
14.2. Выполнение действий с данными из внешних источников…………………………………………. 275
14.2.1. Использование посредников Redux………………………………………………………………………… 275
14.2.2. Использование переходников. Библиотека Redux Thunk…………………………………….. 280
Глава 15. Библиотека Redux: централизованное хранение состояния, раздел 2 282
15.1. Связывание React-компонентов с хранилищем Redux. Библиотека React Redux……. 282
15.1.1. Предоставление хранилища компонентам. Провайдер хранилища……………………. 282
15.1.2. Доступ к хранилищу посредством функции connect()…………………………………………… 283
15.1.2.1. Функция connect(), параметр № 1: получатель данных……………………………….. 284
15.1.2.2. Функция connect(), параметр № 2: брокер влияний………………………………………. 285
15.1.2.3. Функция connect(), параметр № 3: составитель пропов……………………………….. 287
15.1.2.4. Функция connect(), параметр № 4: настройки……………………………………………….. 288
15.1.3. Доступ к хранилищу посредством хуков……………………………………………………………….. 290
15.1.3.1. Получение данных из хранилища………………………………………………………………….. 290
15.1.3.2. Управление данными в хранилище……………………………………………………………….. 292
15.1.3.3. Получение доступа к самому хранилищу…………………………………………………….. 292
15.1.3.4. Работа с хранилищем, предоставляемым через пользовательский
контекст…………………………………………………………………………………………………………………………… 293
15.2. Упрощение создания хранилища. Библиотека Redux Toolkit……………………………………. 294
15.2.1. Упрощение формирования создателей влияний…………………………………………………….. 294
15.2.2. Упрощение создания преобразователя…………………………………………………………………… 295
15.2.3. Упрощение создания хранилища……………………………………………………………………………. 299
15.2.4. Упрощение создания преобразователей срезов…………………………………………………….. 301
15.2.4.1. Допустимые и недопустимые типы данных во влияниях…………………………….. 305
15.2.5. Упрощение создания переходников………………………………………………………………………… 305
15.2.5.1. Создание переходников………………………………………………………………………………….. 305
15.2.5.2. Создание обработчиков операций…………………………………………………………………. 308
15.2.5.3. Запуск переходников, получение результата и обработка ошибок…………… 311
15.2.5.4. Прерывание выполнения операций……………………………………………………………….. 312
15.2.6. Создание мемоизированных селекторов………………………………………………………………… 312
Глава 16. Библиотека Formik: создание веб-форм………………………………… 313
16.1. Быстрое создание веб-форм…………………………………………………………………………………………… 313
16.1.1. Компонент Formik: построитель веб-форм…………………………………………………………….. 313
16.1.2. Компонент Form: веб-форма……………………………………………………………………………………. 315
16.1.3. Компонент Field: элемент управления……………………………………………………………………. 315
16.1.3.1. Вывод флажков, переключателей, списков и полей выбора файлов………….. 316
16.1.4. Обработка занесенных данных……………………………………………………………………………….. 318
16.1.5. Валидация данных……………………………………………………………………………………………………. 319
16.1.6. Ввод данных в массивы и объекты………………………………………………………………………….. 322
16.2. Создание более сложных веб-форм………………………………………………………………………………. 323
16.3. Создание своих элементов управления………………………………………………………………………… 328
16.4. Сброс веб-форм……………………………………………………………………………………………………………….. 329
16.5. Массивы элементов управления……………………………………………………………………………………. 331
Глава 17. Библиотека Yup: валидация данных…………………………………….. 334
17.1. Написание правил валидации. Схемы………………………………………………………………………….. 334
17.1.1. Правила, применимые ко всем типам……………………………………………………………………… 336
17.1.2. Правила валидации строк………………………………………………………………………………………… 337
17.1.3. Правила валидации чисел……………………………………………………………………………………….. 339
17.1.4. Правила валидации логических величин……………………………………………………………….. 339
17.1.5. Правила валидации временнх отметок………………………………………………………………… 340
17.1.6. Правила валидации массивов………………………………………………………………………………….. 340
17.1.7. Правила валидации объектов………………………………………………………………………………….. 341
17.1.8. Написание своих дополнительных условий и преобразований…………………………… 343
17.2. Валидация данных…………………………………………………………………………………………………………. 344
17.2.1. Использование только инструментов Yup……………………………………………………………… 344
17.2.2. Использование Yup совместно с Formik…………………………………………………………………. 346
Глава 18. Библиотека ReactFire: интеграция с Google Firebase…………….. 347
18.1. Первый уровень: провайдер серверного веб-приложения………………………………………….. 347
18.2. Второй уровень: провайдеры базы данных и подсистемы разграничения доступа… 348
18.3. Третий уровень: компоненты-потребители………………………………………………………………….. 349
18.3.1. Получение сведений о текущем посетителе…………………………………………………………… 349
18.3.2. Извлечение данных из базы……………………………………………………………………………………… 351
Глава 19. Библиотека React Awesome Reveal: анимация………………………. 353
19.1. Анимационные эффекты…………………………………………………………………………………………………. 353
19.1.1. Компоненты, реализующие анимационные эффекты……………………………………………. 353
19.1.2. Общие параметры анимационных эффектов………………………………………………………….. 355
19.1.3. Анимирование нескольких элементов (компонентов)……………………………………………. 357
19.1.3.1. Анимирование символов текста……………………………………………………………………… 358
19.2. Специальные эффекты……………………………………………………………………………………………………. 358
Глава 20. Прочие полезные инструменты и библиотеки………………………. 360
20.1. Библиотека React Window: вывод больших перечней………………………………………………… 360
20.1.1. Компонент FixedSizeList: вывод списков с пунктами одинакового размера……….. 360
20.1.2. Компонент VariableSizeList: вывод списков с пунктами разного размера………….. 364
20.1.3. Компонент FixedSizeGrid: вывод таблиц с ячейками одинаковых размеров………. 365
20.1.4. Компонент VariableSizeGrid: вывод таблиц с ячейками разных размеров…………. 369
20.2. Работа с метатегами……………………………………………………………………………………………………….. 371
20.2.1. Указание названия веб-страницы (тег <title>)………………………………………………………. 371
20.2.2. Указание метаданных (тег <meta>)………………………………………………………………………… 372
20.2.3. Привязка к веб-странице сторонних файлов (тег <link>)……………………………………… 372
20.2.4. Задание внутренних таблиц стилей………………………………………………………………………… 374
20.2.5. Задание сторонних веб-сценариев………………………………………………………………………….. 375
20.3. Предварительная загрузка интернет-ресурсов……………………………………………………………. 375
Глава 21. Обработка ошибок……………………………………………………………….. 379
21.1. Обработка ошибок средствами JavaScript……………………………………………………………………. 379
21.2. Обработка ошибок средствами React Router……………………………………………………………….. 380
21.2.1. Базовые средства обработки ошибок……………………………………………………………………… 380
21.2.2. Обработка HTTP-ошибок…………………………………………………………………………………………. 382
21.2.3. Обработка ошибок в приостановщиках Await……………………………………………………….. 383
Глава 22. Разделение кода и загрузка по запросу…………………………………. 384
22.1. Загрузка по запросу средствами JavaScript…………………………………………………………………. 384
22.2. Загрузка по запросу средствами React…………………………………………………………………………. 385
22.3. Загрузка по запросу средствами React Router…………………………………………………………….. 386
Глава 23. Расширенные средства отладки……………………………………………. 388
23.1. Строгий режим………………………………………………………………………………………………………………… 388
23.2. Настройка отладчика, встроенного в Visual Studio Code……………………………………………. 389
23.3. Расширение React Developer Tools………………………………………………………………………………… 390
23.3.1. Сведения о компонентах………………………………………………………………………………………….. 390
23.3.2. Профилировщик………………………………………………………………………………………………………… 395
23.3.3. Настройка расширения React Developer Tools………………………………………………………. 399
23.3.4. Упрощение отладки собственных хуков………………………………………………………………… 402
23.4. Расширение Redux DevTools………………………………………………………………………………………….. 403
23.4.1. Подготовка проекта к работе с Redux DevTools……………………………………………………. 403
23.4.2. Работа с Redux DevTools………………………………………………………………………………………….. 404
23.4.3. Настройка расширения Redux DevTools………………………………………………………………… 409
23.5. Получение метрик Web Vitals………………………………………………………………………………………… 409
23.6. Встроенный профилировщик React………………………………………………………………………………. 409
Глава 24. Публикация веб-приложения……………………………………………….. 412
24.1. Подготовка веб-приложения к публикации………………………………………………………………….. 412
24.2. Создание эксплуатационной редакции веб-приложения……………………………………………. 413
24.3. Публикация веб-приложения…………………………………………………………………………………………. 414
24.3.1. Публикация на мощностях разработчика………………………………………………………………. 414
24.3.1.1. Публикация с помощью Apache HTTP Server……………………………………………….. 414
24.3.1.2. Публикация с помощью веб-сервера serve…………………………………………………….. 415
24.3.2. Публикация на сторонних мощностях……………………………………………………………………. 416
24.4. Выброс React-проекта……………………………………………………………………………………………………. 416
Заключение………………………………………………………………………………………….. 419
Приложение 1. Компоненты-классы…………………………………………………….. 421
П1.1. Введение в компоненты-классы……………………………………………………………………………………. 421
П1.2. Реализация компонентов-классов…………………………………………………………………………………. 422
П1.2.1. Объявление класса компонента………………………………………………………………………………. 422
П1.2.2. Пропы компонента-класса………………………………………………………………………………………. 422
П1.2.3. Состояние компонента-класса………………………………………………………………………………… 423
П1.2.4. Написание обработчиков событий в компоненте-классе…………………………………….. 425
П1.3. Дополнительные инструменты для написания компонентов-классов………………………. 427
П1.3.1. Рефы в компоненте-классе……………………………………………………………………………………….. 427
П1.3.2. Получение данных из контекста React…………………………………………………………………… 428
П1.3.3. Волшебные методы компонента-класса………………………………………………………………… 429
П1.3.4. Принудительное обновление компонента-класса…………………………………………………. 433
П1.4. Средства для обработки ошибок в компонентах-классах. Перехватчики……………….. 433
П1.5. Повышение производительности компонентов-классов.
Лишние обновления и их устранение…………………………………………………………………………………….. 435
П1.5.1. Явное подавление лишних обновлений…………………………………………………………………. 436
П1.5.2. Создание чистых компонентов……………………………………………………………………………….. 437
П1.6. Отладка компонентов-классов……………………………………………………………………………………… 438
Приложение 2. Устаревший API библиотеки React Router……………………. 439
П2.1. Базовые инструменты маршрутизации………………………………………………………………………… 439
П2.2. Создание иерархического списка маршрутов средствами устаревшего API…………… 441
Приложение 3. Описание файлового архива………………………………………… 442
Предметный указатель…………………………………………………………………………. 443
