[javascript] ResizeObserver vs resize event
[react][event][resize][Dimensions] Resize event listener using React hooks
Why do we need to use ResizeObserver?
window는 resize event를 사용해 resize를 할 수 있다
window.addEventListener("resize", function() {
// window resize시 처리
})
DOM은 window처럼 resize 이벤트를 사용해 size 변화를 감지할 수 없다.
ResizeObserver를 사용한 react hook을 만들어 보자
import { useEffect, useState, useRef } from 'react';
type ResizeObserverCallback = (entry: ResizeObserverEntry) => void;
export const useResizeObserver = ($dom: HTMLElement | null | undefined, callback) => {
const [rect, setRect] = useState({ height: 0, width: 0 });
const observerRef = useRef<ResizeObserver | null>(null);
useEffect(() => {
// create on mount
observerRef.current = new ResizeObserver((entries) => {
for (const entry of entries) {
setRect(entry.contentRect);
callback && callback(entry);
}
});
return () => observerRef.current?.disconnect(); // release on unmount
}, []);
useEffect(() => {
if (!$dom) return;
if (!observerRef.current) return;
observerRef.current.observe($dom);
return () => observerRef.current?.unobserve($dom);
}, [$dom]);
return { height: rect.height, width: rect.width };
};
'✘✘✘ Javascript' 카테고리의 다른 글
[Basic] Javascript sync/async, blocking/non-blocking (0) | 2023.05.17 |
---|---|
[javascript] replace with Regex, $n vs $& (0) | 2023.05.09 |
[axios] Query params 자동 인코딩 Query string > params are encoded automatically (0) | 2023.04.10 |
Javascript Falsy values 값들 (0) | 2023.04.09 |
[event] window.matchMedia - mobile detecting: 모바일 확인 하기 + React Hook (0) | 2023.04.06 |
댓글