Je développe une application Web avec React et je dois détecter le moment où la taille de l'écran est entrée dans le point de rupture du mobile afin de modifier l'état. Plus précisément, j'ai besoin que mon sidenav soit réduit lorsque l'utilisateur passe en mode mobile et qu'il est contrôlé par un booléen stocké dans l'état du composant.
Ce que je fais est d'ajouter un écouteur d'événement après le montage du composant:
componentDidMount() {
window.addEventListener("resize", this.resize.bind(this));
this.resize();
}
resize() {
this.setState({hideNav: window.innerWidth <= 760});
}
EDIT: Pour sauvegarder les mises à jour de l’état, j’ai un peu modifié le "redimensionnement", juste pour être mis à jour si nécessaire.
resize() {
let currentHideNav = (window.innerWidth <= 760);
if (currentHideNav !== this.state.hideNav) {
this.setState({hideNav: hideNcurrentHideNav});
}
}
hé je viens de publier un package npm pour ce numéro . Découvrez-le 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);
Ceci est identique à cette réponse mais après avoir attaché votre fonction à l'événement Listener, supprimez-la également sur composantWillUnmount
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 });
}