Reactjs 在React中将事件侦听器添加到窗口的正确方法是什么?

Reactjs 在React中将事件侦听器添加到窗口的正确方法是什么?,reactjs,Reactjs,我想在React组件的浏览器窗口中添加一个调整大小事件侦听器。我是这样做的: componentDidMount(){ window.addEventListener(“调整大小”,()=>this.handleIndowResized()) } 就React中的好的和坏的实践而言,这是一种正确的方法,还是有更好的方法?当组件卸载时,您的方法将导致一个悬空的处理程序,因为您正在创建一个匿名函数,而在卸载React组件时,您没有可用于取消注册事件侦听器的句柄 不幸的是,在JavaScript中,

我想在React组件的浏览器窗口中添加一个调整大小事件侦听器。我是这样做的:

componentDidMount(){
window.addEventListener(“调整大小”,()=>this.handleIndowResized())
}

就React中的好的和坏的实践而言,这是一种正确的方法,还是有更好的方法?

当组件卸载时,您的方法将导致一个悬空的处理程序,因为您正在创建一个匿名函数,而在卸载React组件时,您没有可用于取消注册事件侦听器的句柄

不幸的是,在JavaScript中,实例方法不会自动绑定到实例,因此您无法直接传递对实例方法的引用,除非它已显式绑定到实例。您可以在类构造函数中执行此操作,然后在注册和取消注册事件侦听器期间直接使用对实例方法的引用

使用这种方法,事件侦听器仅在React组件的生命周期内处于“活动”状态

像这样:

class Something extends React.Component {
  constructor() {
    super()
    this.handleWindowResized = this.handleWindowResized.bind(this)
  }

  handleWindowResized() {
    console.log("window resized")
  }

  componentDidMount() {
    window.addEventListener("resize", this.handleWindowResized)
  }

  componentWillUnmount() {
    window.removeEventListener("resize", this.handleWindowResized)
  }
}