Да, решение @babs будет использовать возможность браузера вернуться, чтобы просто вернуться на страницу, но у меня было аналогичное требование к вашей проблеме, когда мне нужно было отследить, откуда пользователь пришел в приложение, сохраняя его при перезагрузке страницы /освежает. Мы используем redux и имеем прослушиватель истории на маршрутизаторе, который отправляет «LOCATION_CHANGE» для каждой навигации.
Проблема заключалась в том, что он дает вам только часть истории и срабатывает после маршрут меняется, поэтому не было видно, откуда он был. Я создал редуктор истории, который просто сохраняет в состоянии очередь / стек последних N изменений в сочетании с набором селекторов, которые предоставляют приложению текущий (верхний) и предыдущий (верхний - 1) объекты местоположения / истории. Это потому, что, хотя история реагирующего маршрутизатора является изменяемым , он не обеспечивает все то, что вы ожидаете *.
Основной шаблон для прослушивания изменений:
// Listen for changes to the current location.
const unlisten = history.listen((location, action) => {
// location is an object like window.location
console.log(action, location.pathname, location.state);
});
Если вы не используете управление состоянием, такое как Redux, вы все равно можете использовать этот обратный вызов для хранения сортировки истории в вашем компоненте маршрута или компоненте корневого приложения, где вы создаете объект истории маршрутизатора. Передавайте в качестве подпорки детям, или используйте новую контекстную систему, или обновляйте и используйте redux, чтобы получить свою историю.
* MemoryHistory действительно предоставляет стек истории, к которому вы можете получить доступ