Skip to content

Commit 0b7de89

Browse files
committed
fix(useMedia): server-side rendering behavior
Fixes #114
1 parent ceb6f3f commit 0b7de89

File tree

1 file changed

+7
-8
lines changed

1 file changed

+7
-8
lines changed

packages/web-api-hooks/src/useMedia.ts

+7-8
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useEffect, useMemo, useState } from 'react';
1+
import { useEffect, useState } from 'react';
22
import { canUseDOM } from './utils';
33

44
/**
@@ -15,24 +15,23 @@ import { canUseDOM } from './utils';
1515
* }
1616
*/
1717
export default function useMedia(query: string): boolean {
18-
const mediaQueryList = useMemo(() => canUseDOM && matchMedia(query), [query]);
19-
const [matches, setMatches] = useState(
20-
mediaQueryList && mediaQueryList.matches,
18+
const [matches, setMatches] = useState(() =>
19+
canUseDOM ? matchMedia(query).matches : false,
2120
);
2221

2322
useEffect(() => {
24-
if (!mediaQueryList) return undefined;
23+
const mediaQueryList = matchMedia(query);
2524

26-
function handleChange(event: MediaQueryListEvent) {
27-
setMatches(event.matches);
25+
function handleChange() {
26+
setMatches(mediaQueryList.matches);
2827
}
2928

3029
// TODO: Refactor to `managedEventListener` when `change` event is supported
3130
mediaQueryList.addListener(handleChange);
3231
return () => {
3332
mediaQueryList.removeListener(handleChange);
3433
};
35-
}, [mediaQueryList]);
34+
}, [query]);
3635

3736
return matches;
3837
}

0 commit comments

Comments
 (0)