
스크롤이 일어날 때 마다 핸들러를 동작시키는것은 자바스크립트의 메인엔진에서 실행 되어야하므로 많은 부하가 걸리는데, 이를 해결해 줄 수 있는게 IntersectionObserver 이다
return(
  <ul>
  list.map(item => (
    <li>item</li>
    ))
  </ul>
  <div ref={targetRef}></div>
  )
const handleIntersect = () => {
      noticePayload.page = noticePayload.page + 1
      getList()
     }
useEffect(() => {
	const options = {
            root: null,
            rootMargin: '30px',
        };
    const observer = new IntersectionObserver(([entry]) => {
        if (entry.isIntersecting) handleIntersect();
     }, options);
  
  		//targetRef.current or targetRef
        observer.observe(targetRef.current);
},[])
//hooks
import { useEffect, useRef } from 'react'
export const useObserver = (
  navNumber: number,
  setNavNumber: React.Dispatch<React.SetStateAction<number>>,
) => {
  const options = {}
  const refElement = useRef<HTMLDivElement>(null)
  useEffect(() => {
    const osv = new IntersectionObserver((entries) => {
      if (entries[0].isIntersecting) {
        setNavNumber(navNumber) 
      } else {
        setNavNumber(0)
      }
    }, options)
    if (refElement.current) {
      osv.observe(refElement.current)
    }
    return () => osv.disconnect()
  }, [])
  return refElement
}
//component
  const [isFocused, setIsFocused] = useState(0)
  const refCurrent = useObserver(1, setIsFocused)
  useEffect(() => {
    console.log({ isFocused }) // isFocused > 0 && 이벤트 실행
  }, [isFocused])