【发布时间】:2021-11-11 15:17:24
【问题描述】:
我创建了以下钩子来监听事件:
const useEventListener = (event: keyof WindowEventMap, callback: (e: Event) => void, element: EventTarget | null = window) => {
const callbackRef = useRef<(e: Event) => void>(callback)
useEffect(() => {
callbackRef.current = callback
}, [callback])
useEffect(() => {
const handler: EventListener = e => callbackRef.current(e);
element?.addEventListener(event, handler)
return () => element?.removeEventListener(event, handler)
}, [event, element])
}
现在我正在尝试创建一个监听媒体查询的钩子。但是,当我将以下函数传递给callback: (e: Event) => void 时,(e: MediaQueryListEvent) => setIsMatching(e.matches) 我从打字稿中得到一个错误。自从MediaQueryListEvent extends Event 以来,我一直在苦苦挣扎!我该如何解决?
const useMediaQuery = (mediaQuery: string) => {
const [isMatching, setIsMatching] = useState(false);
const [mediaQueryList, setMediaQueryList] = useState<MediaQueryList|null>(null);
useEffect(() => {
const list: MediaQueryList = window.matchMedia(mediaQuery)
setMediaQueryList(list)
setIsMatching(list.matches)
}, [mediaQuery])
# ERROR HERE
useEventListener("change", (e: MediaQueryListEvent) => setIsMatching(e.matches), mediaQueryList)
return isMatching;
}
完全错误:
Argument of type '(e: MediaQueryListEvent) => void' is not assignable to parameter of type '(e: Event) => void'.
Types of parameters 'e' and 'e' are incompatible.
Type 'Event' is missing the following properties from type 'MediaQueryListEvent': matches, media
【问题讨论】:
标签: reactjs typescript react-hooks react-typescript