window resize 이벤트 같은 경우엔 윈도우 창(현재 창)에 대해서만 이벤트가 발생함.
resize 이벤트 자체가 window 객체에서만 발생한다. 그 외의 element에 이벤트를 달아놔도 발생 안함.
반면 ResizeObserver 같은 경우엔 지정한 element에 대해서 이벤트가 발생한다.
window.addEventListener('resize', callback);
const callback = () => {
console.log(window.innerWidth);
}
창 사이즈가 변경될 때 마다 이벤트가 실행되는 것을 확인할 수 있다. (밑의 gif는 debounce 걸어둠)
new ResizeObserver(callback)
const mainRef = useRef<HTMLElement>(null);
...
useEffect(() => {
if(!mainRef.current) {
return;
}
const resizeObserver = new ResizeObserver((entries) => {
const entry = entries[0] || null;
if(!entry) {
return;
}
const contentWidth = entry.contentRect.width;
console.log(contentWidth);
});
resizeObserver.observe(mainRef.current);
}, []);
...
결과 (여기도 debounce 걸어둠)
파란색 화면이 줄어들때마다 resizeObserver가 감지하여 callback 함수가 실행되는 것을 알 수 있다.