개발 이야기/Front-end

Next.js

sonoa 2023. 4. 7. 08:30
반응형

What is NextJS?

  • React 기반의 프레임워크
  • The React Framework for Production

NextJS

NextJS-Key Features & Benefits

Server-side Rendering

페이지 콘텐츠를 클라이언트가 아니라 전적으로 서버에서 준비하는 것

File-based Routing

Routing: 사용자에게 여러 페이지가 있는 것처럼 착각하게 하는 것
파일과 폴도를 이용해서 페이지와 라우트를 정의한다
추가 코드를 작성 할 필요가 없으며, 코드를 적게 작성하면서 작업량을 줄일 수 있다.

Fullstack Capabilities

Next / React 애플리케이션에 쉽게 백엔드 코드를 추가 할 수 있다.
이런 방식으로 코드를 추가해서 데이터베이스나 파일에 데이터를 저장하거나
거기에서 데이터를 받아오거나, 인증을 추가하는 등 모든 작업을 할 수 있다.

  • Automatic Setup
  • npx create-next-app@latest
  • yarn create next-app
  • 파일명에 [].js 대괄호를 넣으면 NextJS는 이것을 동적 페이지로 인식해서 경로에 여러 값을 불러온다.
  • 싱글페이지를 유지할려면, Next 에서 제공하는 특수 컴포넌트를 활용해야 한다.
  • import {} from 'next/link'; : 링크를 담당하는 하위 패키지
  • 새로운 HTML 페이지를 가져오지 않고도 이동할 수 있게 만든다.
  • 이게 싱글페이지 애플리케이션이다.
  • 사용된 코드 예시
// index.js
// our-domain.com/

function HomePage() {
  return <h1>The Home Page</h1>;
}

export default HomePage;

// news 폴더에 index.js
// our-domain.com/news
import Link from 'next/link';
import { Fragment } from 'react/cjs/react.production.min';

function NewsPage() {
  return (
    <Fragment>
      <h1>The News Page</h1>
      <ul>
        <li>
          <Link href='/news/nextjs-is-a-great-framework'>
            NextJS Is A Great Framework
          </Link>
        </li>
        <li>
          <Link href='/news/something-else'>Something Else</Link>
        </li>
      </ul>
    </Fragment>
  );
}

export default NewsPage;


// news 폴더에 [newId].js
import { useRouter } from 'next/router';

// our-domain.com/news/something-important

function DetailPage() {
  const router = useRouter();

  const newsId = router.query.newsId;

  // send a request to the backend API
  // to fetch the news item with newsId

  return <h1>The Detail Page</h1>;
}

export default DetailPage;
  • _app.js : 특수 파일
    • pages 폴더에서 바로 쓸 수 있다.
    • 파일이 없으면 직접 만들면 된다.
    • 마치 최상위 컴포넌트 같은 것이다.
    • NextJS 가 렌더링하는 최상위 컴포넌트처럼 작동한다.
import Layout from "../components/layout/Layout";
import "../styles/globals.css";

function MyApp({ Component, pageProps }) {
  return (
    <Layout>
      <Component {...pageProps} />
    </Layout>
  );
}

export default MyApp;
  • 이렇게 하면 여러 페이지 콘텐츠가 이 Layout 컴포넌트 안에 들어가게 된다.
  • 각각의 페이지 콘텐츠에 설정할 필요가 없다.
반응형

'개발 이야기 > Front-end' 카테고리의 다른 글

Next.js #2  (0) 2023.04.13
React Styling  (0) 2023.04.08
React 라이브러리 #8  (0) 2023.04.06
React 라이브러리 #7  (0) 2023.04.05
React 공식문서로 디테일 잡기 #8  (0) 2023.04.04