Компонент React загружается на полпути вниз по странице

#reactjs #react-router #components

#reactjs #react-маршрутизатор #Компоненты

Вопрос:

я создаю свое портфолио в react и сталкиваюсь с проблемой. На моей домашней странице я прокручиваю страницу вниз, чтобы перейти к разделу проекта, и когда я нажимаю на ссылку, чтобы просмотреть проект, загружается новый компонент, но, похоже, он загружается в том же положении, в котором я находился на своем компоненте раньше (на полпути вниз по странице). Есть способ это исправить?

Код для компонента моего проекта:

 <Project
        thumbnail={ProjectBg}
        title={this.state.MyHumberTitle}
        description={this.state.MyHumberDesc}
        type={this.state.MyHumberType}
        path={this.state.MyHumberPath}
      />
  

Компонент домашней страницы
Загружается компонент проекта

Комментарии:

1. Можете ли вы поделиться своим кодом?

2. Я обновил код и изображения в качестве примера

Ответ №1:

Это определенно ожидаемое, хотя и своеобразное поведение. Ваша веб-страница загружается, вы устанавливаете положение прокрутки, и когда вы программно изменяете то, что отображается на экране, ничто не указывает браузеру также программно обновлять положение прокрутки.

Когда я использую маршрутизатор, я обычно включаю <ScrollToTop> компонент, который прослушивает изменения маршрута, как описано здесь: https://github.com/ReactTraining/react-router/blob/master/packages/react-router-dom/docs/guides/scroll-restoration.md .

Похоже, вы не используете маршрутизатор, поэтому вам нужно привязать обновление programmatic scroll к некоторым изменениям состояния. Всякий раз, когда состояние изменяется таким образом, что будет отображаться новая страница с информацией, вам нужно прокрутить назад к началу.

Несмотря ни на что, вот как вы собираетесь сбросить прокрутку:

 window.scrollTo(0, 0)
  

И вы, вероятно, будете привязывать это к componentDidUpdate функции или useEffect вызову с соответствующими частями состояния в качестве условий изменения (второе, arg массива).

Ответ №2:

Решение для всех, у кого есть эта проблема, в новом компоненте, который вы хотите загрузить, добавьте:

 componentDidMount() {
    window.scrollTo(0, 0)
  }