← Back to all snippets
JAVASCRIPT

React to CSS Media Queries with useMediaQuery Hook

A custom React hook that allows your components to react dynamically to CSS media query changes, enabling responsive designs directly in JavaScript.

import { useState, useEffect } from 'react';

const useMediaQuery = (query) => {
  const [matches, setMatches] = useState(false);

  useEffect(() => {
    const mediaQueryList = window.matchMedia(query);
    const listener = (event) => setMatches(event.matches);

    // Set initial state
    setMatches(mediaQueryList.matches);

    // Listen for changes
    mediaQueryList.addEventListener('change', listener);

    // Clean up
    return () => mediaQueryList.removeEventListener('change', listener);
  }, [query]);

  return matches;
};

export default useMediaQuery;

// Example Usage:
// function MyResponsiveComponent() {
//   const isLargeScreen = useMediaQuery('(min-width: 1024px)');
//   const isDarkMode = useMediaQuery('(prefers-color-scheme: dark)');

//   return (
//     <div>
//       {isLargeScreen ? 'Large Screen Layout' : 'Small Screen Layout'}
//       <p>Dark mode enabled: {isDarkMode ? 'Yes' : 'No'}</p>
//     </div>
//   );
// }
How it works: The `useMediaQuery` hook provides a way to detect if a given CSS media query matches the current viewport or system settings. It leverages the `window.matchMedia` API, updating its internal state whenever the media query's result changes. This enables conditional rendering or logic within your React components based on responsive breakpoints, dark mode preferences, or other media features.

Need help integrating this into your project?

Our team of expert developers can help you build your custom application from scratch.

Hire DigitalCodeLabs