๐ฉ๐ค ํ๋ก ํธ์๋/nextjs
[Next.js][react-query] API Routes ์ฌ์ฉ์ ๋ฌดํ request ๋ฐ์ ์ด์
Next.js์ API Routes ๋๋ถ๋ถ ํ๋ก์ ํธ ์งํ ์, ๋ฐฑ์๋ API ๊ฐ๋ฐ๋ณด๋ค ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ด ๋ ๋นจ๋ฆฌ ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. API ๊ฐ๋ฐ ์๋ฃ ์ ํ ์คํธํ ์ ์๋ mockAPI๊ฐ ํ์ํ๋ค. Next.js์ API Routes ๊ธฐ๋ฅ์ ์ด์ฉํด ๊ฐ๋จํ mockAPI๋ฅผ ๊ตฌํํ ์ ์๋ค. pages/api ํด๋ ๋ด๋ถ์ ์๋ ํ์ผ๋ค์ ๋ชจ๋ /api/* ๋ก ์์ฒญํ ์ ์๋ค. // api/reviews/[reviewId] import { NextApiRequest, NextApiResponse } from "next"; export default function handler(req: NextApiRequest, res: NextApiResponse) { if (req.method === "GET") { co..
[Nextjs] Linking & Navigating
Next ๋ผ์ฐํฐ๋ ์๋ฒ ์ค์ฌ์ ๋ผ์ฐํ ๊ณผ ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ค๋น๊ฒ์ด์ ์ ์ฌ์ฉํ๋ค. ์ฆ๊ฐ์ ์ธ ๋ก๋ฉ ์ํ์ concurrent ๋ ๋๋ง์ ์ง์ํ๋ค. ์ฆ, ๋ค๋น๊ฒ์ด์ ์ ํด๋ผ์ด์ธํธ ์ํ๋ฅผ ์ ์งํ๊ณ , ๋น์ฉ์ด ๋ง์ด ๋๋ ์ฌ๋ ๋๋ง์ ํผํ๊ณ , ์ค๋จํ ์ ์์ผ๋ฉฐ race condition์ ์ ๋ฐํ์ง ์๋๋ค. ์ปดํฌ๋ํธ HTML ์์๋ฅผ ํ์ฅํ ๊ฒ์ผ๋ก prefetching๊ณผ ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ค๋น๊ฒ์ด์ ์ ์ ๊ณตํ๋ค. Next์์ ๋ค๋น๊ฒ์ด์ ์ ์ฃผ๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค. ํน์ ์ํฉ์ด ์๋๋ผ๋ฉด ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅํ๊ณ ์๋ค. import Link from 'next/link'; export default function Page() { return Dashboard; } next/link์์ importํด์ href๋ฅผ ์ค์ ํด์ฃผ๋ฉด..
[NextJS] Pages, Layouts
Next 13์ pages, layouts, templates๋ฅผ ์ฝ๊ฒ ๋ง๋๋ ์๋ก์ด ํ์ผ ์ปจ๋ฒค์ ์ ๋์ ํ๋ค. Pages page๋ route์ ์ ์ผํ UI์ด๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ฒ ์ปดํฌ๋ํธ๋ก ๊ตฌ์ฑ๋์ง๋ง ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ก ์ค์ ํ ์ ์๋ค. ๋ฐ์ดํฐ๋ฅผ ํจ์นํ ์ ์๋ค. Layouts ์ฌ๋ฌ pages ๊ฐ์ ๊ณต์ ๋๋ UI์ด๋ค. layout์ ์ํ๋ฅผ ๋ณด์กดํ๊ณ , ์ธํฐ๋ํฐ๋ธ๋ฅผ ์ ์งํ๊ณ ์ฌ๋ ๋๋ง์ ํ์ง ์๋๋ค. layout.js ํ์ผ์์ default export๋ก ์ ์ํ ์ ์๋ค. child ๋ ์ด์์์ด๋ child ํ์ด์ง๊ฐ ์๋ ๊ฒฝ์ฐ์, ํญ์ children props๋ฅผ ์ค์ ํด์ผํ๋ค. // app/dashboard/layout.tsx export default function DashboardLayout({ child..
[NextJS] Routing
React Router์๋ ๋ค๋ฅด๊ฒ Next๋ ํ์ผ ์์คํ ๊ธฐ๋ฐ ๋ผ์ฐํ ์ผ๋ก ์๋ํ๋ค. ๊ธฐ๋ณธ ๋ผ์ฐํ app ๋๋ ํ ๋ฆฌ ๋ด๋ถ์ ํด๋๋ค์ ์๋์ผ๋ก ๋ผ์ฐํ ๋๋ค. ํด๋ ๋ด๋ถ์ page.js๊ฐ ์์ด์ผ URL ๊ฒฝ๋ก๋ก ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค. // dashboard/page.js export default function Page() { return ( Page ); } ์ค์ฒฉ ๋ผ์ฐํ ํด๋๋ฅผ ์ค์ฒฉํด์ ์ค์ฒฉ ๋ผ์ฐํ ์ ์ฌ์ฉํ ์ ์๋ค. ๋์ ๋ผ์ฐํ []๋ฅผ ์ฌ์ฉํด์ ํด๋ ์ด๋ฆ์ ๊ฐ์ธ์ฃผ๋ฉด ๋๋ค. // app/blog/[slug]/page.js export default function Page({ params }) { return My Post; } params๋ฅผ ์ฌ์ฉํด์ URL์ ์ง์ ํ slug ๊ฐ์ ๊ฐ์ ธ์ฌ ์ ์๋ค. /blog/a ๊ฒฝ..