В моем приложении реагирования мне нужно прослушать событие изменения размера окна, поэтому, если размер окна меньше X, я буду вызывать mobileFunc, если он больше X, я буду вызывать desktopFunc для рендеринга некоторого html с большим количеством переменных. , (Эти переменные и аргументы получают разные значения для desktopFunc и mobileFunc)
Я слушаю событие, однако, изменение размера каждого окна снова и снова устанавливает мое состояние. Я не хочу этого делать. Я пытаюсь найти способ установить / изменить свое состояние, когда это необходимо, и, если возможно, уменьшить событие изменения размера прослушивания (необязательно). Я открыт для предложений с debouncing, 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>
)
}