React.js useMediaQuery Hook

Custom React.js hook that watches for certain breakpoints.

React.js useMediaQuery Hook

import { useState } from "react";

export const useMediaQuery = (width: number) => {
  const [targetReached, setTargetReached] = useState(false)

  const updateTarget = useCallback((e) => {
    if (e.matches) setTargetReached(true)
    else setTargetReached(false)
  }, [])

  useEffect(() => {
    const media = window.matchMedia(`(max-width: ${width}px)`)
    media.addEventListener('change', updateTarget)

    // Check on mount (callback is not called until a change occurs)
    if (media.matches) setTargetReached(true)

    return () => media.removeEventListener('change', updateTarget)
  }, [])

  return targetReached
}

export default

Usage

import useMediaQuery from "./hooks/useMediaQuery";

export default function App() {
  const isDetected = useMediaQuery(600);

  return (
    <div>
      {isDetected ? (
        <div>
          <p style={{ color: "green" }}>Screen size is 600 or less</p>
        </div>
      ) : (
        <div>
          <p style={{ color: "red" }}>Screen size is 600 or more</p>
        </div>
      )}
    </div>
  );
}