โ๏ธ React Intersection Observer ๐ Hook ๐ช.
1843 ๋จ์ด observerintersectionhookreact
๋์ ์์์ ์์ ์์ ๋๋ ์ต์์ ๋ฌธ์์ ๊ต์ฐจ์ ์์ ๋ณ๊ฒฝ๋ฉ๋๋ค.
๋ณต์กํด ๋ณด์ด์ง๋ง React์์๋ ๊ฐ๋จํ ํํฌ๋ฅผ ์ฌ์ฉํ์ฌ ๊ต์ฐจ๋ฅผ ๋ฌ์ฑํ ์ ์์ต๋๋ค.
๋ช ์ฌํด์ผ ํ ์ ์ผํ ๊ฒ์ '๋์ ์์'๋ฅผ ๊ด์ฐฐ์์๊ฒ ์ ๋ฌํด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค.
useRef() ์ฌ์ฉ
const targetMiddle = React.useRef();
const targetTop = React.useRef();
<h3 ref={targetTop}>TOP</h3>
<h3 ref={targetMiddle}>Middle</h3>
ํ
ํํฌ๋ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค
๋์ ์์๋ฅผ ์ธ์๋ก ํ์ฉํ๋ ํจ์๋ฅผ ๋ด๋ณด๋ด์ผ ํฉ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์๊ณ๊ฐ์ 0์ผ๋ก ์ค์ ๋์ง๋ง ํ์์ ๋ฐ๋ผ ์ต์ ์ ๊ฐ์ง๊ณ ๋ ์ ์์ต๋๋ค.
_isIntersecting _entry ์์ฑ์ ์ฌ์ฉํ์ฌ ์ํ ์ค์
export function useObserver(ref) {
const [isIntersecting, setIsIntersecting] = React.useState(false);
// OPTIONS
const options = {
// root: target.current,
rootMargin: '0px',
threshold: 0.5, // A threshold of 1.0 means that when 100% of the target is visible within the element specified by the root option, the callback is invoked.
};
// Observer
const observer = new IntersectionObserver(([entry]) => setIsIntersecting(entry.isIntersecting),options);
// Use Effect
React.useEffect(() => {
observer.observe(ref.current)
// DISCONNECT
return () => observer.disconnect()
}, []);
// Return
return isIntersecting
};
useEffect ๋ด๋ถ์์ _disconnect _ ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ๋์ ์์ ๊ด์ฐฐ์ ์ค์งํ ์ ์์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก ์ฐธ ๋๋ ๊ฑฐ์ง์ด ๋ ์ ์๋ ์ํ๋ฅผ ๋ฐํํฉ๋๋ค.
์ด ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ์๋ฅผ ๋ค์ด ๋น๋์ค๋ฅผ ํ์ํ๊ฑฐ๋ ์จ๊น์ผ๋ก์จ vDom์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
๋์ ์์๊ฐ ๋ณด์ด๋ฉด ํ๊ณ๋ ๋น์ ์ ์์๋ ฅ์ ๋๋ค!
์ด ๋น๋์ค ๊ฐ์ด๋์์ ๋งค์ฐ ๊ฐ๋จํ ๊ตฌํ, ์ข์ ๊ด์ฐฐ์ ๋ณผ ์ ์์ต๋๋ค ๐ ...
Video Guide
๐ ๐
Reference
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(โ๏ธ React Intersection Observer ๐ Hook ๐ช.), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://dev.to/alexpaper/react-intersection-observer-hook--4c6oํ ์คํธ๋ฅผ ์์ ๋กญ๊ฒ ๊ณต์ ํ๊ฑฐ๋ ๋ณต์ฌํ ์ ์์ต๋๋ค.ํ์ง๋ง ์ด ๋ฌธ์์ URL์ ์ฐธ์กฐ URL๋ก ๋จ๊ฒจ ๋์ญ์์ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค