Я не совсем знаю, что вы уже пробовали, но, основываясь на вашем фрагменте кода, я собрал эту быструю песочницу, показывающую, как ее заблокировать: https://codesandbox.io/s/recursing-river-3bjf5
Вы можно увидеть, что если вы прокрутите страницу и нажмете ссылку thisthat
, она не перейдет к началу страницы, а перейдет к другим ссылкам.
Я полагаю, что ключевым моментом является то, что мы визуализируем компонент, передав его в Route
, поэтому он напрямую получает все реквизиты маршрутизатора <Route component={ScrollToTop} />
(вы можете использовать декоратор withRouter или что-то еще, но все они достигают одной и той же цели)
Затем у него просто есть список путей вроде const dontScrollIntoViewOnPaths = ["/this/that"];
Мы извлекаем самое последнее имя пути из местоположения let { hash, pathname } = location;
И затем мы просто не выполняем код, если только путь не находится в этом списке
else if (!dontScrollIntoViewOnPaths.includes(pathname)) {
window.scrollTo(0, 0);
}
Это полезно?