BACK
Use casesRoute param load — загрузка по id из URL
Use cases · 18

Route param load — загрузка по id из URL

Паттерн

URL — это источник истины. /users/1 должна показать пользователя 1, /users/2 — пользователя 2. Когда меняется id в URL — грузим нового пользователя.

Какую проблему решаем

Пользователь кликает быстро: /users/1 → /users/2. Запрос для id=1 ещё в полёте, когда уже отправлен запрос для id=2. Если медленный ответ id=1 придёт после id=2, на странице окажется не тот пользователь. Императивный subscribe-внутри-subscribe из ActivatedRoute не справится.

Операторы и зачем они нужны

  • distinctUntilChanged — Router иногда эмитит тот же id повторно. Защищаемся от лишней перезагрузки.
  • switchMap — при новом id отменяет загрузку старого. Гонка ответов решена.
  • map — превращает DTO с сервера в page view model.
  • catchError внутри switchMap — ошибка становится состоянием страницы, а не убивает route stream.

Подводные камни

  • mergeMap — старый медленный ответ может перерисовать страницу нового id. Классическая ошибка.
  • concatMap — заставит ждать загрузку для уже неактуальной страницы. Пользователь увидит «застрявший» интерфейс.
  • catchError снаружи всего pipeline — одна ошибка остановит все будущие переходы по route. Ставьте только внутри switchMap.

Что в итоге получаем

Страница всегда соответствует последнему id в URL. Ошибка — это нормальное состояние страницы, а не сломанная навигация.

script.ts // TypeScript
CONSOLE · Console Output
Нажмите на запуск, чтобы увидеть результат...