<aside> ๐
</aside>
์ฌ์ค ์ฐ๋ฆฌ ํ๋ก์ ํธ ํน์ฑ์ ํต์ฌ ๊ธฐ๋ฅ์ด ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ๊ณผ ์ฑํ ์ด๊ธฐ ๋๋ฌธ์ tanstack query์ ๋์ ์ด ํ์์ ์ด์ง๋ ์๋ค. ๊ทธ๋ ์ง๋ง ๊ธฐ์กด์ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ค๋ฅด๊ฒ ์๋ฒ ์ํ ๊ด๋ฆฌ๋ฅผ ์ํด ํ์ด๋ Tanstack Query๋ โ์ด๋ค ๊ฒ์ผ๊น?โ, โ์ด๋ค ์ฅ์ ์ด ์์๊น?โ๋ฅผ ์ง์ ์ฌ์ฉํด๋ณด๋ฉฐ ์์๋ณด๋ ค๊ณ ๋์ ํ๋ค.
์์ฒญ ์ ๋ฐฉ์ก์ ์ ๋ณด, ํ๋กํ ๋ฑ์์ API ์์ฒญ์ด ์ฌ์ฉ๋๊ณ ์๋ค. ์ด๋ฐ ๋ถ๋ถ์ ์ ๋ณ๊ฒฝ์ด ๋์ง ์๋ ๋ฐ์ดํฐ๋ค์ด๋ฏ๋ก ๋ฐ์ดํฐ ์บ์ฑ์ ํ๋ ๊ฒ์ด ํจ์จ์ ์ผ ๊ฒ์ด๋ผ๊ณ ์๊ฐ๋๋ค.
ํ์ฌ ๋ฉ์ธํ์ด์ง์์๋ ๋ฐฉ์ก ์ค์ธ ๋ชฉ๋ก์ ๋ฌดํ ์คํฌ๋กค๋ก ์ ๊ณตํ๊ณ ์๋ค. ์ด ๋ถ๋ถ์ useInfiniteQuery์ react-intersection-observer ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์ฝ๋๋ฅผ ์ข ๋ ๊ฐ๊ฒฐํ๊ณ ๊ฐ๋
์ฑ ์๊ฒ ๋ฐ๊ฟ ์ ์์ ๊ฒ์ด๋ผ๊ณ ๊ธฐ๋๋๋ค.
Tanstack Query์ dev tools ์ค์น
pnpm add @tanstack/react-query @tanstack/react-query-devtools
ESLint Plugin Query ์ค์น
pnpm add -D @tanstack/eslint-plugin-query
.eslintrc์ ํ๋ฌ๊ทธ์ธ ์ถ๊ฐ
{
"plugins":["@tanstack/query"],
"extends": ["plugin:@tanstack/query/recommended"],
"rules": {
"@tanstack/query/exhaustive-deps": "error",
"@tanstack/query/stable-query-client": "error",
}
}
react-intersection-observer ์ค์น
pnpm add react-intersection-observer
๋ฌดํ ์คํฌ๋กค์ ๊ตฌํํ ๋ useIntersect๋ผ๋ ์ปค์คํ
ํ
์ ๋ง๋ค์ด์ ๋ทฐํฌํธ ๋ด๋ก ์ฐธ์กฐ๋ ์ปดํฌ๋ํธ๊ฐ ๋ค์ด์๋์ง ํ์ธํ์๋๋ฐ, ์ด๊ฒ์ react-intersection-observer ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ useInView ํ
์ผ๋ก ๋ฐ๊ฟ์ ์ฌ์ฉํด๋ณด๋ ค๊ณ ์ค์นํ๋ค.
๋ค ์ค์น๋ฅผ ํ์ผ๋ฉด ๋ฐ์ดํฐ ์บ์ฑ์ด ์ ์ฉ๋ ๋ฒ์๋ฅผ <QueryClientProvider>๋ก ๊ฐ์ธ๋ฉด ๋๋ค. ํ์ฌ ๋ฃจํธ ์์์ ๋ผ์ฐํฐ๋ ์๋์ ๊ฐ์ด ์ค์ ๋์ด ์๋ค.
// main.tsx
import { createRoot } from 'react-dom/client';
import './index.css';
import { RouterProvider } from 'react-router-dom';
import { router } from '@/app/routes';
createRoot(document.getElementById('root')!).render(<RouterProvider router={router} />);
export const router = createBrowserRouter(
[
{
path: '/',
element: <Layout />,
children: [
// ...
],
},
{
path: 'broadcast',
element: <ProtectedRoute />,
children: [
{
path: '',
element: (
<Suspense fallback={<LoadingCharacter />}>
<BroadcastPage />
</Suspense>
),
},
],
},
],
routerOptions,
);
์ฐ๋ฆฌ ํ๋ก์ ํธ๋ ๋ผ์ฐํฐ์ ๋ชจ๋ ์ปดํฌ๋ํธ๋ฅผ ๊ณตํต์ผ๋ก ๊ฐ์ธ๋ ์์๊ฐ ์๋ค. ๊ทธ๋์ app ๋ ์ด์ด์ App ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค๊ณ , ๋ค์๊ณผ ๊ฐ์ด ๊ตฌํํ๋ค.
App.tsx