How to detect if screen size has changed to mobile in React? How to detect if screen size has changed to mobile in React? reactjs reactjs

How to detect if screen size has changed to mobile in React?


What I did is adding an event listener after component mount:

componentDidMount() {    window.addEventListener("resize", this.resize.bind(this));    this.resize();}resize() {    this.setState({hideNav: window.innerWidth <= 760});}componentWillUnmount() {    window.removeEventListener("resize", this.resize.bind(this));}

EDIT:To save state updates, I changed the "resize" a bit, just to be updated only when there is a change in the window width.

resize() {    let currentHideNav = (window.innerWidth <= 760);    if (currentHideNav !== this.state.hideNav) {        this.setState({hideNav: currentHideNav});    }}

UPDATE: Time to use hooks!If you're component is functional, and you use hooks - then you can use the useMediaQuery hook, from react-responsive package.

import { useMediaQuery } from 'react-responsive';...const isMobile = useMediaQuery({ query: `(max-width: 760px)` });

After using this hook, "isMobile" will be update upon screen resize, and will re-render the component. Much nicer!


Using hooks in React(16.8.0+) refering to:https://stackoverflow.com/a/36862446/1075499

import { useState, useEffect } from 'react';function getWindowDimensions() {  const { innerWidth: width, innerHeight: height } = window;  return {    width,    height  };}export default function useWindowDimensions() {  const [windowDimensions, setWindowDimensions] = useState(getWindowDimensions());  useEffect(() => {    function handleResize() {      setWindowDimensions(getWindowDimensions());    }    window.addEventListener('resize', handleResize);    return () => window.removeEventListener('resize', handleResize);  }, []);  return windowDimensions;}


This is the same as @Ben Cohen answer but after attaching your function to eventListner, also remove it on 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 });}