首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >侦听向下滚轮以及装载和卸载事件-侦听器

侦听向下滚轮以及装载和卸载事件-侦听器
EN

Stack Overflow用户
提问于 2019-04-15 05:45:36
回答 1查看 211关注 0票数 0

我想为上下滚动轮事件添加一个事件侦听器,其中我根据向上或向下滚动到不同的页面,并挂载和卸载此事件侦听器。

代码语言:javascript
复制
pageDown = () => {[redirect to page down]}

render() {
  window.addEventListener('wheel', function(e) {
    if (e.deltaY > 0) {
      this.pageDown();
    }
});

return ([Some Code])}

我正在使用这个,虽然我的网站上的重定向最初是好的,但在上下滚动几次后,重定向会变得混乱并出错。我想这可能是因为没有挂载/卸载。

我尝试了下面的方法,在render()中删除了之前的event-listener。

代码语言:javascript
复制
componentDidMount() {
  window.addEventListener('wheel', function(e) {
    if (e.deltaY > 0) {
      this.pageDown();
    }
  });
}

componentWillUnmount() {
  window.removeEventListener('wheel', function(e) {
    if (e.deltaY > 0) {
      this.pageDown();
    }
  });
}

render(){return ([Some code])}

然而,当我试图向下滚动时,react警告我this.pageDown()不是一个函数,我不确定为什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-15 05:49:09

事件处理程序中的this引用function本身,而不是组件。

典型的解决方案如下:

代码语言:javascript
复制
var self = this;
window.addEventListener('wheel', function(e) {
  if (e.deltaY > 0) {
    self.pageDown();
  }
});

但是,更好的解决方案是使用箭头函数:

代码语言:javascript
复制
window.addEventListener('wheel', e => {
  if (e.deltaY > 0) {
    this.pageDown();
  }
});

另请注意,您没有正确删除函数,您应该删除与要添加的函数完全相同的函数(相同的函数引用):

代码语言:javascript
复制
onWheel = e => {
  if (e.deltaY > 0) {
    this.pageDown();
  }
};

componentDidMount() {
   window.addEventListener('wheel', this.onWheel);
}

componentWillUnmount() {
   window.removeEventListener('wheel', this.onWheel);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55680299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档