프론트엔드/Next.js

[Next.js] 라우팅(routing)

진기명기 2023. 8. 17. 00:47
현재까지 사용자의 효율적인 페이지 이동을 위해 react-router-dom을 사용하여 라우팅 기능을 구현하였다. 
라우팅 기능은 매우 중요하면서도 기본이 되는 기능이라고 생각한다. 
Next.js에서는 라우팅을 어떻게 구현하면 좋을지 강의를 통해 얻은 지식을 정리하고, 프로젝트에 적용해 보고자 한다 👀

 

 

 


💁‍♀️ (먼저!) 라우팅이란? 
* 웹 라우팅은 웹 애플리케이션에서 URL의 경로에 따라 특정 페이지나 리소스를 사용자에게 보여주는 것

👉🏻 즉, url의 path에 특정 페이지를 설정하고, 사용자가 해당 경로로 이동할 때, 설정한 페이지를 보여주는 것이다. 

 

 

 

🙋🏻‍♀️ Next.js 라우팅
1️⃣ 페이지 생성
'pages' 디렉터리에 파일을 생성하면, 해당 파일의 경로와 이름에 따라 자동으로 라우트가 생성

ex) pages/create 폴더는 '/create' 세그먼트를 의미하며, pages/create.js에 해당하는 화면을 반환
ex) pages/read 폴더는 '/read' 세그먼트를 의미하며, pages/read.js에 해당하는 화면을 반환

2️⃣ 동적 라우팅
파일 또는 디렉토리 이름을 대괄호([ ])로 감싸면 동적 라우트를 생성

ex) read/[id]/page.js 파일은 '/read/1', '/read/2',... 등의 경로로 접근할 때 렌더링되며, 'id' 값을 동적으로 가져옴

 

 

▶️ src/app/layout.js는 기본적인 골격 역할
💁‍♀️ 공통된 내용을 다루는 것은 layout.js에서 다루는 것이 좋다.

 

▶️ src/app/page.js는 layout.js의 {children}에 해당하는 컴포넌트의 '내용'

 

▶️ create/page.js와 read/[id]/page.js 확인 

👀 page.js는 공통 약속 (특정 폴더 안에 있는 page.js 파일은 해당 폴더 이름을 경로로 가짐)

 

 

 

 

 

🥴 동적 라우팅 접근
위에 설명한 예시인 read/1, read/2,... 의 1, 2, 3,... 에 접근하는 방법은?

➡️ props로 주고, {props.params.id}로 접근
export default async function Read(props) {

  const resRead = await fetch(`http://localhost:9999/topics/${props.params.id}`, {cache: 'no-store'})
  const topic = await resRead.json()

  return (
    <>
      ...(생략)
      <br />id의 값은 {topic.id}
    </>
  )
}

 

 

 

 

🏃🏻‍♀️ 페이지 이동
return (
  <html>
    <body>
      <h1><Link href='/'>MainPage</Link></h1>
      <ol>
        {
        topics.map((item) => {
          return <li key={item.id}><Link href={`/read/${item.id}`}>{item.title}</Link></li>
        })
        }
      </ol>
        {children}
        <Control />
    </body>
  </html>
)
✅ 페이지 간 이동을 위해 'Link' 컴포넌트 사용

 

'프론트엔드 > Next.js' 카테고리의 다른 글

[Next.js] SPA(Single Page Application)  (2) 2023.08.21
[Next.js] 설치 및 빌드하기  (1) 2023.08.10