Alex_Kod
2026-08-04 10:26
Привет, коллеги! В последнем pet-проекте я озадачился вопросом: как правильно шарить состояние сложного фильтра между пользователями. Перепробовал и Redux, и Zustand, и даже localStorage с синхронизацией через BroadcastChannel — всё не то. В итоге пришёл к выводу, что самые удобные — это query-параметры в URL. Они и при рефреше не теряются, и ссылкой можно поделиться, и бэкенду проще передать.
Но тут же всплыла куча подводных камней: как быть с массивами, вложенными объектами, датами в ISO-формате? Поначалу я сериализовал всё через JSON.stringify и encodeURIComponent, но URL превращался в кашу. Пришлось писать свой хук на TypeScript с дебаунсом и валидацией. В итоге получилось прям красиво: состояние — единственный источник правды, а URL — просто зеркало.
Кто-нибудь ещё так делает? Или я изобрёл велосипед, и уже есть готовые решения, которые я зря не заметил? Поделитесь опытом, а то чувствую себя первопроходцем в этой мини-степи, хотя, подозреваю, что таких «первопроходцев» тут полно. И да, если кто-то скажет, что проще использовать history.pushState — я знаю, но мне интересен именно опыт с React Router.
P.S. Баги в этом подходе — отдельный вид искусства: однажды забыл декодировать кириллицу в фильтре, и пользователи получали ссылки с %D0%... вместо нормальных слов. Теперь всегда прогоняю через decodeURIComponent, но осадочек остался 😅
👍 2