Spaces:
Running
Running
| /** | |
| * 媒体查询 Hook | |
| */ | |
| import { useState, useEffect } from 'react'; | |
| export function useMediaQuery(query: string): boolean { | |
| const [matches, setMatches] = useState(() => { | |
| return window.matchMedia(query).matches; | |
| }); | |
| useEffect(() => { | |
| const media = window.matchMedia(query); | |
| const listener = (event: MediaQueryListEvent) => { | |
| setMatches(event.matches); | |
| }; | |
| // Set initial value via listener to avoid direct setState in effect | |
| listener({ matches: media.matches } as MediaQueryListEvent); | |
| media.addEventListener('change', listener); | |
| return () => media.removeEventListener('change', listener); | |
| }, [query]); | |
| return matches; | |
| } | |