【发布时间】:2019-09-19 13:22:40
【问题描述】:
在我的react应用中,我需要监听窗口的resize事件,所以如果窗口大小小于X,我会调用mobileFunc,如果大于X,我会调用desktopFunc渲染一些带有很多变量的html . (这些变量和参数对于 desktopFunc 和 mobileFunc 获得不同的值)
我正在监听事件,但是,每个窗口的大小变化都会一次又一次地设置我的状态。我不想那样做。我正在尝试找到一种方法来在必要时设置/更改我的状态,并在可能的情况下减少监听调整大小事件(可选)。我愿意接受有关去抖动、shouldComponentUpdate 等的建议。我应该找到一种有效的方法。
// mobile is false by default in my state.
componentDidMount() {
window.addEventListener('resize', this.setDeviceType)
}
componentWillUnmount(){
window.removeEventListener('resize', this.setDeviceType)
}
setDeviceType() {
if(window.innerWidth < 768) {
this.setState({mobile: true})
} else {
this.setState({mobile: false})
}
}
render() {
return(
<div>
{this.state.mobile ? this.mobileFunc() : this.desktopFunc()}
</div>
)
}
【问题讨论】:
-
使用
debounce -
我该怎么做?你能根据我的代码给我一个例子吗?
-
顺便说一句,这样做的原因是什么?我很少看到真正需要在 JS 中实际使用这样的东西(尽管肯定有用例)。
标签: javascript reactjs addeventlistener debouncing