Next.js 기초

Dorong·2024년 2월 25일
0

Next.js

목록 보기
1/1

✅ 라우팅

  • 기본적으로는 src/app 디렉토리 내부의 page.tsx를 layout.tsx가 감싸고 있는 구조
  • src/app 디렉토리에 새 폴더를 생성한 뒤 page.tsx 파일을 내부에 생성하면 해당 컴포넌트의 화면이 됨
  • 그리고 next.js는 자동 라우팅을 지원해서 새로운 디렉토리의 이름이 곧 라우팅 주소가 됨!!
  • Next.js와 React는 a태그 대신 Link 태그를 사용하자!!
<Link href="/"></Link>

🔸 폴더 구조 하나 더 알아두자면

  • nextjs의 컴포넌터는 같은 디렉토리 내 layout.tsx 파일이 있으면 해당 컴포넌트에 감싸져서 렌더링됨
  • 그런데 만약 상위 폴더에 또 layout.tsx가 있다면 이중으로 감싸져서 렌더링 되는 구조


✅ Map

  • React와 동일하게 nextjs도 for 반복문을 사용할 수 없음
  • 그러니 map함수를 주로 사용
{
  arr.map((item, index) => {
    return (
      <div key={index}>{item.name}</div>
    )
  }        
}


✅ Image

  • 보통 사진 파일 public 폴더에 보관
  • 사진 경로를 "/"로 시작하면 자동으로 public에서 파일을 찾음

🔸 최적화된 이미지를 넣으려면

  • nextjs의 Image 태그 사용
  • 다만 사진을 직접 import 해와서 사용해야함
import Image from "next/image";
import testImg from "/public/test-image.png";
...
<Image src={testImg}/>
  • 직접 import를 해와야해서 반복문 등 여러 사진이 필요할 때는 곤란
  • 외부 url로 이미지를 불러올 때는 width, height 속성을 지정해줘야하는 제약조건


✅ Component

  • clinet/server component 두 종류
  • 일반적인 파일에서 선언하는 컴포넌트들은 모두 server component
  • 해당 파일 가장 상단에 "use client"를 선언하면 client component가 됨

🔸 server component

  • html엘리먼트에 onClick같은 자바스크립트 기능 삽입 불가능
  • useState, useEffect 등도 사용 불가
  • 즉 html을 동적으로 제어하는 문법이 보통 불가함
  • 실행할 js 코드들이 없어서 로딩 속도가 더 빠름!!
  • 검색엔진 노출 유리

🔸 client component

  • html 엘리먼트에 js 기능 및 useState등 훅 사용 가능
  • js 코드가 많아 로딩 속도가 느림
  • hydration(html을 유저에게 보낸 후 js로 html을 다시 읽고 분석하는 작업) 때문에 로딩 속도가 느림

🔸 그럼 언제 뭐가 더 좋음?

  • 큰 페이지는 일반적으로 server component
  • 그 안에서 js 코드가 들어가야한다면 client component로 분리해서 사용
profile
🥳믓진 개발자가 되겠어요🥳

0개의 댓글