В моем реагирующем приложении мне нужно прослушивать событие изменения размера окна, поэтому, если размер окна меньше 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
- person Zohir Salak   schedule 30.04.2019