Тестовое React-приложение с авторизацией и защищенным dashboard-разделом для работы со списком пользователей из DummyJSON API.
Репозиторий: ImDoode/user-dashboard-react Демо: на GitHub Pages
- открытая страница
/loginи защищенный раздел/dashboard/users; - авторизация через DummyJSON с хранением сессии в
localStorage; - защита маршрутов для гостя и авторизованного пользователя;
- список пользователей с догрузкой по скроллу;
- фильтры с синхронизацией в URL;
- деталка пользователя как вложенный маршрут;
TanStack Queryдля серверного состояния и кеширования;Vitestдля модульных тестов иESLintдля обязательных проверок качества.
Viteдает быстрый цикл разработки и простую конфигурацию без лишней инфраструктуры.TypeScriptдержит API-контракты и роутинг в строго типизированном состоянии, что особенно важно при переносе с уже существующего Angular-приложения.
- приложение уже естественно разбито на открытую и защищенную части, а деталка пользователя оформлена как вложенный маршрут;
- защита маршрутов и шаблоны страниц в роутере дают ту же ясность, что и конфигурация маршрутов в Angular;
- вложенные маршруты удобно описывают деталку пользователя без дублирования страницы списка.
- список пользователей и деталка являются серверным состоянием, а не локальным состоянием интерфейса;
- библиотека уже решает кеширование, повторные запросы, loading/error состояния и повторное использование данных;
- это лучше, чем вручную писать временное решение для кеша на уровне компонентов.
- для пользовательской сессии не нужен тяжелый глобальный менеджер состояния;
Zustandдает маленький и прозрачный store без ceremony;persist-механизм естественно закрывает задачу хранения сессии между перезагрузками.
- логин-форма компактная, но должна оставаться типобезопасной;
react-hook-formминимизирует лишние повторные перерисовки;zodдержит схему валидации рядом с контрактом формы.
Проект организован по модульным слоям:
src/app— корневая сборка приложения: провайдеры, роутер, защита маршрутов.src/pages— контейнеры страниц для маршрутов.src/widgets— layout-слой и крупные UI-блоки страницы.src/features— пользовательские сценарии (auth,users).src/entities— доменные сущности (session,user) и их модели/API.src/shared— общие утилиты, конфигурация, базовый сетевой слой и настройка тестов.
Такое разбиение выбрано потому, что:
- роутинг и провайдеры не смешиваются с бизнес-логикой;
- API-контракты живут рядом с доменными сущностями, а не внутри компонентов;
- users flow изолирован в своей feature и может расширяться без расползания по всему проекту.
Из Angular-версии сохранены:
- визуальная структура экранов;
- SCSS-стили страницы входа, шаблонов страниц, списка пользователей и деталки;
- API-контракты пользователей и сессии;
- поведенческая модель маршрутов и фильтров.
При этом React-реализация сознательно отличается:
- Angular facade заменен на сочетание хука уровня сценария и слоя запросов;
- interceptor заменен на централизованный помощник для запросов и чтение токена из хранилища сессии;
- signals и RxJS-оркестрация заменены на состояние роутера, кеш запросов и декларативные хуки.
npm install
npm run dev
npm run lint
npm run test
npm run build
npm run check- добавить интеграционные тесты для входа и защищенной маршрутизации;
- вынести общие UI-примитивы в
shared/ui, если приложение продолжит расти