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

前端 未结 5 1585
南方客
南方客 2021-01-30 17:25

I am developing a web app with React and need to detect when the screen size has entered the mobile break-point in order to change the state. Specifically I need my sidenav to b

5条回答
  •  感情败类
    2021-01-30 18:01

    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!

提交回复
热议问题