본문 바로가기

Frontend/Next.js

React에서 Next.js로 전환하기

해당 글은 https://nextjs.org/ 공식 문서를 통해 학습한 내용입니다.

 

React에서 Next.js로 전환하는 과정에 대해서 알아보자.

 

다음은 Next.js로 전환하기 전 소스코드이다.

 

<html>
  <body>
    <div id="app"></div>
	
    <script src="https://unpkg.com/react@17/umd/react.development.js"></script>
    <script src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"></script>
    <script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>

    <script type="text/jsx">
      const app = document.getElementById("app")

      function Header({ title }) {
        return <h1>{title ? title : "Default title"}</h1>
      }

      function HomePage() {
        const names = ["Ada Lovelace", "Grace Hopper", "Margaret Hamilton"]
        const [likes, setLikes] = React.useState(0)

        function handleClick() {
          setLikes(likes + 1)
        }

        return (
          <div>
            <Header title="Develop. Preview. Ship. 🚀" />
            <ul>
              {names.map((name) => (
                <li key={name}>{name}</li>
              ))}
            </ul>

            <button onClick={handleClick}>Like ({likes})</button>
          </div>
        )
      }
			
      ReactDOM.render(<HomePage />, app)
    </script>
  </body>
</html>

 

1. Next.js 전환하기

Next.js로 전환하면 unpkg.com에서 react와 react-dom 스크립트를 더이상 읽어오지 않아도 된다.

대신 Node Package Manager(NPM)을 통해 로컬에 패키지를 설치해야한다.

 

// package.json
{
  "dependencies": {
    "next": "^12.1.0",
    "react": "^17.0.2",
    "react-dom": "^17.0.2"
  }
}

 

2. index.html 파일에서 다음 코드를 제거

- react 및 react-dom 스크립트 : 패키지가 로컬에 설치되기 때문에 스크립트에서 불러오지 않아도 됨

- babel 스크립트 및 <script type="text/jsx"> 태그  : Next.js에 JSX를 JavaScript로 변환하는 컴파일러가 내장되어 있음.

- <html> 및 <body> 태그 : Next.js가 해당 태그를 생성함

- app 엘리먼트 및 ReactDom.render() 메서드 : app 엘리먼트를 별도로 지정하지 않아도 되며, Next.js가 자동으로 렌더링 함

- React.useState(0) 함수의 React 부분 : Next.js에서 React 라이브러리에서 직접 import 하므로 별도로 표시하지 않아도 됨.

 

해당 코드를 삭제한 뒤 보완한 코드는 다음과 같고, 이는 jsx로 구성되어 있으므로 파일명을 html에서 js나 jsx로 변경해야한다.

 

// index.html
import { useState } from 'react';
function Header({ title }) {
  return <h1>{title ? title : 'Default title'}</h1>;
}

function HomePage() {
  const names = ['Ada Lovelace', 'Grace Hopper', 'Margaret Hamilton'];

  const [likes, setLikes] = useState(0);

  function handleClick() {
    setLikes(likes + 1);
  }

  return (
    <div>
      <Header title="Develop. Preview. Ship. 🚀" />
      <ul>
        {names.map((name) => (
          <li key={name}>{name}</li>
        ))}
      </ul>

      <button onClick={handleClick}>Like ({likes})</button>
    </div>
  );
}

 

3. Next.js로 완전히 전환하기 위한 세가지 작업

- index.js 파일을 page라는 새 폴더로 이동

- React 구성 요소에 내보내기를 추가해 Next.js가 페이지의 기본 구성 요소로 렌더링 요소로 식별할 수 있도록 함

 

// ...
   export default function HomePage() {
//  ...

 

- Package.json에 다음 스크립트를 추가, 이는 Next.js 개발 서버로 동작함.

 

   // package.json
   {
    "scripts": {
        "dev": "next dev"
    },
     // "dependencies": {
     //   "next": "^11.1.0",
     //   "react": "^17.0.2",
     //   "react-dom": "^17.0.2"
     // }
   }

 

이상으로 React에서 Next.js로 변환하는 과정에 대해서 알아보았다. 다음 과정에서부터는 Next.js의 고급 기능에 대해 더욱 자세히 알아보도록 하자.

'Frontend > Next.js' 카테고리의 다른 글

React 작동 방식 이해  (0) 2023.04.23