Как определить, изменился ли размер экрана на мобильный в React?
Я разрабатываю веб-приложение с React и должен определить, когда размер экрана вошел в мобильную точку останова, чтобы изменить состояние. В частности, мне нужно, чтобы мой sidenav был свернут, когда пользователь входит в мобильный режим, и это контролируется с помощью логического значения, хранящегося в состоянии внутри компонента.
3 ответов
Я добавляю прослушиватель событий после монтирования компонента:
componentDidMount() {
window.addEventListener("resize", this.resize.bind(this));
this.resize();
}
resize() {
this.setState({hideNav: window.innerWidth <= 760});
}
Эй, я только что опубликовал пакет npm для этой проблемы. Проверьте этоhttps://www.npmjs.com/package/react-getscreen
import React, { Component } from 'react';
import {withGetScreen} from 'react-getscreen'
class Test extends Component {
render() {
if (this.props.isMobile()) return <div>Mobile</div>;
if (this.props.isTablet()) return <div>Tablet</div>;
return <div>Desktop</div>;
}
}
export default withGetScreen(Test);
//or you may set your own breakpoints by providing an options object
const options = {mobileLimit: 500, tabletLimit: 800}
export default withGetScreen(Test, options);
Это то же самое, что ответ но после присоединения вашей функции к eventListner также удалите ее на componentWillUnmount
constructor() {
super();
this.state = { screenWidth: null };
this.updateWindowDimensions = this.updateWindowDimensions.bind(this);
}
componentDidMount() {
window.addEventListener("resize", this.updateWindowDimensions());
}
componentWillUnmount() {
window.removeEventListener("resize", this.updateWindowDimensions)
}
updateWindowDimensions() {
this.setState({ screenWidth: window.innerWidth });
}