Skip to main content

useMediaQuery

The useMediaQuery hook allows you to track the state of a CSS media query, returning a boolean that indicates whether the media query matches the current device or viewport characteristics. It is useful for responsive design and handling different screen sizes or features dynamically.

Usage

import { useMediaQuery } from 'hooks-ts';

export default function UseMedaiQueryExample() {
const isMobile = useMediaQuery('(max-width: 768px)');

return (
<div>
<p>isMobile: {isMobile ? 'Yes' : 'No'}</p>
</div>
);
}

Returns

matches: boolean - A boolean value indicating whether the media query matches the current state. It is true if the query matches, and false otherwise.

Hook

import { useState, useEffect } from 'react';

export function useMediaQuery(query: string): boolean {
const [matches, setMatches] = useState<boolean>(false);

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

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

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

// Cleanup listener on unmount
return () => {
mediaQueryList.removeEventListener('change', documentChangeHandler);
};
}, [query]);

return matches;
}