React Router предотвращает обновление свойства маршрута - PullRequest
0 голосов
/ 05 июля 2018

У меня проблема с реквизитами для обновления маршрутизатора при каждом изменении маршрута компонентом.

В моем документе есть несколько разделов, и все разделы связаны с меню навигации .., например:

  • / о # ABOUTUS
  • / о # контакт

В компоненте about я реализовал функцию scrollSpy, например:

scrollSpy() {
    if (this.isTransitioning) return;
    let hash = this.getCurrentSection();
    if (this.state.activeSection != hash) {
        this.setState({ activeSection: hash });
        history.pushState(null, null, hash);
    }
}

, а также функция scrollTo, как это

scrollTo(hash) {
    this.isTransitioning = true;
    let section = $(hash);
    let body = $("html, body");
    let navBar = $("#mainNav");
    let top = section.offset().top - navBar.height() - 10;

    body.stop().animate({
        scrollTop: top
    }, 800, 'swing', () => {
        this.isTransitioning = false;
        this.scrollSpy();
    })
}

Я также реализую эту функцию для прокрутки статьи в нужный раздел, когда она выбрана на панели навигации.

componentDidUpdate(prevProps, prevState) {
    if (this.props.location.hash != prevProps.location.hash) {
        this.scrollTo(this.props.location.hash);
    }
}

Теперь проблема в том, что когда я вставляю строку для обновления истории в scrollSpy, вот так:

scrollSpy() {
    if (this.isTransitioning) return;
    let hash = this.getCurrentSection();
    if (this.state.activeSection != hash) {
        this.setState({ activeSection: hash });
        history.pushState(null, null, hash);
        this.props.history.push(hash);
    }
}

Система будет прокручиваться бесконечно, вверх и вниз.

Кажется, компонент посылает сигнал в React-Router, а реквизиты реакции-маршрутизатора меняются, а scrollSpy снова отправляет обратно в реагирующий маршрутизатор. Так что это вроде застряло в петле. Добавление переменной, такой как isUpdating = true, не помогло, и сделало ее поведение непредсказуемым. Иногда он прокручивается, иногда просто нет, иногда он прыгает обратно наверх.

Как я могу определить, произошла ли смена реквизита из моего триггера history.push или пользовательской панели навигации? Я хочу, чтобы страница прокручивалась до нужной верхней части раздела, когда пользователь нажимает на панель навигации, даже если это текущий раздел, отображаемый на экране.

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...