Не держи внутри
В мире фронтенда нет вопроса более холиварного, чем то как управлять состоянием. Хочу немного подкинуть в него дров:
Любой UI состоит из двух вещей: из состояния и UI-рендера, который это состояние превращает в HTML и CSS.
Причём состояние можно грубо поделить на 2 части: корневое и зависимое. Попробую объяснить разницу на примере:
- корневое: jwt токен, который мы храним в куке
- зависимое: информация о пользователе, которую мы получаем по jwt токену с сервера.
Т.е. корневую часть состояния приложение может получить только от пользователя.
И теперь вопрос: почему бы не попытаться хранить максимум корневого состояния в URL?
Из плюсов:
- Если пользователь А захочет поделиться страницей, то его знакомый увидит страницу в максимально близком состоянии, которое открыто у пользователя А
- Урл един, а значит все стейт менеджеры смотрят в одно место. У нас возникает единый источник правды
К примеру, посмотрите как работает фильтрация товаров в маркетплейсах(к примеру, в Амазоне или Яндекс.Маркете) или в http://typescriptlang.org/play. Они все на каждый чих меняют урл и это сверхудобно как для пользователя, так и для разработчика
Но есть минус пока что:
- Нет кроссбраузерного способа подписаться на изменения урла. Пока есть https://developer.mozilla.org/en-US/docs/Web/API/Navigation/navigate_event, который поддерживается только хромом.
Так что увы, но это мечты о будущем, которое случится неизвестно когда. Хотя всегда можно заманкипатчить window.location и навесить туды своих интерестностей. Но об этом как-нибудь в другой раз.
Post #21
636