#reactjs #scroll #routes #next.js #single-page-application
Вопрос:
Я работаю над проектом с Next/React. Когда я нажимаю на кнопку, которая должна перенести меня на другую страницу, положение прокрутки сохраняется, что означает, что я попадаю на новую страницу на X пикселей ниже.
Я добавил на страницу следующий код:
if (window.pageYOffset > 0) {
window.scrollTo(0, 0);
}
Это работает. Но дело в том, что перед тем, как это сработает, страница отображается на X пикселей вниз примерно за 1 секунду или меньше, прежде чем перейти к началу.
Ответ №1:
Добавьте прокрутку в верхний код в useEffect
крючке или componentDidMount
в компоненте страницы. Вам нужно будет добавить это в компоненты каждой страницы. Я бы рекомендовал переместить его в пользовательский крюк и вызвать его.
Для вашего useEffect
сделайте это:
useEffect(() => window.scrollTo(0, 0), []);
Это гарантирует, что как только компонент будет смонтирован, он прокрутится вверх. Пустой []
массив зависимостей гарантирует, что он будет выполнен только один раз, когда компонент смонтирован.
Комментарии:
1. Спасибо! К сожалению, именно это я и сделал, и сначала он переходит на предыдущую позицию страницы, а затем поднимается наверх.
Ответ №2:
Есть два способа, которые вы можете попробовать:
Первый
ReactDOM.findDOMNode(this).scrollLeft = 0;
вы можете добавить этот код внутри componentDidUpdate, если это компонент класса, или внутри useEffect, если это компонент функции
Второй
history.listen((location, action) => {
window.scrollTo(0, 0)
})