Я использую событие прокрутки для объекта окна в компоненте, построенном с использованием React.
Я добавляю слушателя в методе жизненного цикла componentDidMount()
.
componentDidMount() {
window.addEventListener('scroll',this.handleScrollChange);
}
Теперь у меня есть кнопка, которая прокручивается до определенной позиции в событии клика.
Когда я нажимаю на кнопку, срабатывает следующая функция:
window.removeEventListener('scroll', this.handleScrollChange);
this.changePageUrl(currentData);
// Add it back again.
this.setState(
{
currentData
},
() => {
window.scrollTo({
top: currentTop + 100,
behavior: 'smooth',
});
setTimeout(() => {
window.addEventListener('scroll', this.handleScrollChange);
}, 10000);
},
);
Даже если я увеличу setTimeout до 10000
, моя функция обработчика изменения события прокрутки this.handleScrollChange
сработает, а событие прокрутки не будет удалено.
Читая некоторые другие проблемы, я уже связал свою функцию в конструкторе, так что это не проблема со ссылкой на функцию:
constructor(props) {
super(props)
this.handleScrollChange = this.handleScrollChange.bind(this);
}
Реплицированный код можно увидеть здесь в примере:
https://stackblitz.com/edit/react-djblfj?file=index.js
Как удалить прослушиватель событий при нажатии кнопки и добавить его снова после завершения прокрутки click
?