Раз уж меня прорвало, вспомню ещё один интересный кейс.
Решали примерно в одно время две проблемы:
- кастомизация view transitions
- восстановление скролла при переходах с VT
С view transitions кастомизацией основная трудность была в back/forward переходах через браузерные кнопки и жесты, которые роутер видит по факту события popstate.
Соответственно тут разработчик не может задать конкретный view transition type для перехода назад или вперёд, добавляются только встроенные в Tramvai types.
Но, допустим мы листаем галерею, каждый элемент это роут. Тогда нам нужна анимация слева-направо как при прямых переходах на предыдущий слайд так и при back переходах с последующих слайдов (то есть зеркальная).
В итоге получилось достаточно изящно решить проблему:
- добавлен отдельный tapable хук который возвращает VT types для текущей навигации
- возвращаемое значение разработчик может переопределить
- в параметрах хука есть вся информация - о VT предыдущего, текущего и следующего роутов, и кто инициатор - браузер или наш роутер
Пример в документации - https://tramvai.dev/docs/features/routing/view-transitions#how-to-customize-view-transition-for-browser-backforward-buttons
А с релизом React 19.3 новый челлендж - как подружить трамвайный механизм VT для роутов с нативными и декларативными апи реакта...
Post #238
573