Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

205
Views
how to rerender a page using UseEffect hook on window.innerWidth in react

I want to make some changes depending on the screen size

useEffect(() => {
        console.log("am called");

     if (window.innerWidth < 800) {
        document.getElementsByTagName("body")[0].style.display = "none";
     }
     if (window.innerWidth > 800) {
            document.getElementsByTagName("body")[0].style.display = "block";
        }

        
    }, [window.innerWidth]);

what is the problem with this code

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

You need to observe window size changing and put this value to state.

    const [width, setWidth] = useState(0)
    useEffect(() => {
        const onResize = () => setWidth(window.innerWidth)
        window.addEventListener('resize', onResize);
        return () => {
            window.removeEventListener("resize", onResize)
        }
    }, [setWidth])

    //and then
    useEffect(() => {
        console.log("am called");

        if (width< 800) {
            document.getElementsByTagName("body")[0].style.display = "none";
        } else {
            document.getElementsByTagName("body")[0].style.display = "block";
        }


    }, [width]);

better solution

export default function useMatchMedia(condition) {
    const [isMatching, setIsMatching] = useState(false);

    useEffect(
        function updateMatchMedia() {
            if (!condition) return setIsMatching(true);

            const updateIsMatching = (event) => setIsMatching(event.matches);

            const matcher = window.matchMedia(condition);

            setIsMatching(matcher.matches);

            matcher.addEventListener('change', updateIsMatching);

            return () => {
                matcher.removeEventListener('change', updateIsMatching);
            };
        },
        [condition]
    );

    return [isMatching];
}

then you can use it

   isTablet = useMatchMedia(`(max-width: 800px)`);
   useEffect(() => {
     if(isTablet){
     } else {
     }
   }, [isTablet])
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!