Не ломай паутину
Перед тем, как начать, я хотел бы сделать следующую цитату в качестве аксиомы, которую нужно принять во внимание на некоторое время.
«Любой веб-сайт должен всегда отображать один и тот же контент для данного URL, независимо от любого предыдущего состояния»
- Кто-то со здравым смыслом
Я могу придумать некоторые исключения, такие как настройки сеанса или браузера, которые могут различать контент между пользователями, но это должно быть верно для каждого отдельного пользователя.
Это важно иметь в виду при создании одностраничных приложений.
Распространенная ошибка, с которой я сталкивался много раз во время разработки, - это когда страница, отображающая представление результатов, предлагает фильтры для настройки поиска. Как только пользователи начинают настраивать эти фильтры, результаты обновляются, но URL-адрес остается прежним, вызывая десинхронизацию состояния URL-адреса, поэтому, если пользователь попытается перезагрузить страницу или поделится URL-адресом, веб-страница не будет отображать отфильтрованные результаты.
Это связано с тем, что разработчик напрямую обновил состояние приложения вместо использования маршрутизатора для синхронизации URL-адреса с ним.
Далее я покажу несколько примеров, написанных с использованием Vue и Vue Router.
Предупреждение: все эти сведения были написаны непосредственно с носителя, я не могу гарантировать, что они работают без ошибок, но я думаю, что они отражают идею
Плохая реализация
Здесь мы можем увидеть, как поля ввода Checkbox и Pagination напрямую обновляют свойства данных, а затем наблюдатели за ними запускают выборку новых результатов без обновления URL-адреса.
Это не правильно.
Хорошая реализация
В этом примере мы используем средства навигации, предоставляемые Vue Router, чтобы подключиться к циклу маршрутизатора, чтобы мы могли получить параметры запроса и синхронизировать с ними наши данные.
Даже мы могли бы пойти дальше и избавиться от свойств данных, чтобы использовать только параметры, предоставленные маршрутом, поэтому нам не нужно ничего синхронизировать, как показано в этой последней сущности.
Таким образом, браузер будет отслеживать любые изменения состояния страницы, и пользователь будет иметь полную функциональность для действий Назад / Вперед и полностью доступный URL-адрес.