๐ย Reference
๐ย Chapter
useInfiniteQuery
โฃ
react-intersection-observer
- react-intersection-observer
- ๋ธ๋ผ์ฐ์ ์ Intersection Observer API๋ฅผ React์์ ์์ฃผ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ๋ง๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
- "ํน์ ์ปดํฌ๋ํธ(์์)๊ฐ ํ๋ฉด(๋ทฐํฌํธ)์ ๋ค์ด์๋์ง ๋๊ฐ๋์ง"๋ฅผ ๊ฐ์งํด์ฃผ๋ ๋๊ตฌ์ด๋ค.
- ๋ฌดํ ์คํฌ๋กค์ ๊ตฌํํ ๋ '๊ฐ์ฅ ์๋์ ์๋ ์์'๊ฐ ํ๋ฉด์ ๋ณด์ด๋ ์๊ฐ์ ํฌ์ฐฉํ๊ธฐ ์ํด ๊ฑฐ์ ํ์์ ์ผ๋ก ์ฌ์ฉ๋๋ค.
์ฌ์ฉํ๋ ์ด์
- ๊ณผ๊ฑฐ์๋ ์คํฌ๋กค ์ด๋ฒคํธ๋ฅผ ์ง์ ๋ฑ๋กํด์ ๊ตฌํํ์ง๋ง, ๋ ๋ฐฉ์์๋ ํฐ ์ฐจ์ด๊ฐ ์๋ค.
- ์คํฌ๋กค ์ด๋ฒคํธ (
window.addEventListener('scroll', ...)): ์คํฌ๋กคํ ๋๋ง๋ค ํจ์๊ฐ ์คํ๋์ด ์ฑ๋ฅ์ ๋ถ๋ด์ ์ค๋ค. (๋๋ฐ์ด์ฑ์ด๋ ์ฐ๋กํ๋ง ์ฒ๋ฆฌ๊ฐ ํ์์ ์ด๋ค.)
- Intersection Observer: ๋ธ๋ผ์ฐ์ ๊ฐ ์ง์ ์์๋ฅผ ๊ฐ์ํ๋ค๊ฐ, ์ค์ ํ ์กฐ๊ฑด(ํ๋ฉด์ ๋
ธ์ถ๋จ)์ด ์ถฉ์กฑ๋ ๋๋ง ์ ํธ๋ฅผ ์ค๋ค. ์ฑ๋ฅ ๋ฉด์์ ํจ์ฌ ํจ์จ์ ์ด๋ค.
๊ธฐ๋ณธ์ ์ธ ์ฌ์ฉ๋ฒ (Hook ๋ฐฉ์)
- ๊ฐ์ฅ ๋ง์ด ์ฐ์ด๋ ๋ฐฉ์์
useInView ํ
์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
import { useInView } from 'react-intersection-observer';
const MyComponent = () => {
// ref: ๊ฐ์ํ ์์๋ฅผ ์ง์
// inView: ์์๊ฐ ํ๋ฉด์ ๋ณด์ด๋ฉด true, ์๋๋ฉด false
const { ref, inView } = useInView({
threshold: 0, // ์์๊ฐ 1ํฝ์
์ด๋ผ๋ ๋ณด์ด๋ฉด ๊ฐ์ง (0 ~ 1 ์ฌ์ด ๊ฐ)
triggerOnce: false, // ๋ฑ ํ ๋ฒ๋ง ๊ฐ์งํ ์ง ์ฌ๋ถ
});
return (
<div ref={ref} style={{ height: '100px', background: 'lightblue' }}>
{inView ? '๋ณด์ฌ์! ๐' : '์ ๋ณด์ฌ์... ๐'}
</div>
);
};