mirror of
https://github.com/streamich/react-use.git
synced 2025-12-08 18:02:14 +00:00
30 lines
660 B
TypeScript
30 lines
660 B
TypeScript
import { useEffect, useState } from 'react';
|
|
import { isClient } from './util';
|
|
|
|
const useMedia = (query: string, defaultState: boolean = false) => {
|
|
const [state, setState] = useState(isClient ? () => window.matchMedia(query).matches : defaultState);
|
|
|
|
useEffect(() => {
|
|
let mounted = true;
|
|
const mql = window.matchMedia(query);
|
|
const onChange = () => {
|
|
if (!mounted) {
|
|
return;
|
|
}
|
|
setState(!!mql.matches);
|
|
};
|
|
|
|
mql.addListener(onChange);
|
|
setState(mql.matches);
|
|
|
|
return () => {
|
|
mounted = false;
|
|
mql.removeListener(onChange);
|
|
};
|
|
}, [query]);
|
|
|
|
return state;
|
|
};
|
|
|
|
export default useMedia;
|