Кнопка возврата сапера не работает после функции pushstate истории

Я использую следующие версии Sapper и Svelte:

"sapper": "^0.27.0",
"svelte": "^3.0.0"

После обновления URL-адреса с помощью функции history.pushState(), а затем перехода на другую страницу. Кнопка "Назад" не возвращается к URL-адресу, измененному history.pushState()


person Yousuf Iqbal Hashim    schedule 03.08.2019    source источник


Ответы (2)


Не используйте history.pushState() - это то же самое, что и самому element.appendChild(document.createElement('div')) в Svelte. Вместо этого используйте goto функцию Sapper: https://sapper.svelte.dev/docs#goto_href_options

person Rich Harris    schedule 03.08.2019
comment
Верно. Я действительно пытался изменить URL-адрес при изменении поля input. - person Yousuf Iqbal Hashim; 04.08.2019
comment
Я использовал goto(`/profile/edit?id=${profile_id}`, { replaceState: true }). Я получаю желаемые результаты, но теряю фокус поля формы. Как мое поле может оставаться в фокусе после goto() с replaceState? - person Yousuf Iqbal Hashim; 04.08.2019
comment
Как вы импортируете функцию goto. - person Joshua; 05.08.2019
comment
@YousufIqbalHashim вам, вероятно, потребуется сохранить ссылку на элемент формы и программно установить фокус или использовать autofocus, если это новый элемент. - person Rich Harris; 05.08.2019
comment
@JoshuaUchennaAmaju import { goto } from '@sapper/app' - person Rich Harris; 05.08.2019
comment
Я пробовал это раньше, но получил предупреждение, что мне не следует импортировать из сапера. И я думаю, что приложение в какой-то момент зависло. - person Joshua; 05.08.2019

Я думаю, что это проблема с сапером https://github.com/sveltejs/sapper/issues/791

Упомянутый обходной путь - передать {id:0} как данные в history.pushState(). Например

history.pushState({id:0}, '', url)

Но будьте осторожны! мы не знаем, к чему это приведет.

person Madacol    schedule 24.12.2020