ReactJS

[NextJS] NextJS Set up

Gaeun Lee 2022. 8. 21. 03:58

1. cmd에 cd 경로명을 입력하여 프로젝트 생성을 원하는 공간을 지정한 후  npx create-next-app@latest을 입력하여 프로젝트를 생성한다

2. code 프로젝트명을 입력하여 vsc에서 프로젝트를 연다

3. npm run dev를 vsc 터미널에 입력하여 문제가 없는지 확인한다

 

4. url에 접속하였을 때 아래와 같이 뜨면 정상적으로 작동 중인 것이다

 

5. pages 폴더에서 index.js를 제외한 모든 파일들은 지운다

 

6. index.js를 페이지를 나타내는 필수적인 코드인 다음의 코드로 수정한다

index.js

export default function Home() {
  return (<></>)
}

 

6. next.js에서의 pages 폴더 안의 파일은 그 파일명의 url 페이지를 생성한다

* index.js 는 파일명이 아닌 홈페이지 (' / ')를 나타낸다

 

7. export default function의 컴포넌트명은 파일명과 같지 않아도 된다

8. jsx를 쓰고 있다면 React.js를 import할 필요가 없다

9. next.js의 가장 좋은 기능 중 하나는, 앱에 있는 페이지들이 미리 렌더링 된다는 것이다 이들은 정적으로 생성된다

* creat react app은 client-side render(브라우저가 유저가 보는 모든 UI를 만듦)의 앱을 만든다 즉, 브라우저가 자바스크립트를 가져와서 client-side의 자바스크립트가 모든 UI를 만드는 것이다 브라우저는 자바스크립트 코드가 왔을 때만 UI를 만들 수 있다

** 반면 next.js는 자바스크립트를 비활성화하여도 UI를 나타낼 수 있다

10. next.js의 또 다른 좋은 기능은 Hydration이다

* react.js를 프론트엔드 안에서 실행하는 것을 hydration이라 일컫는다 next.js는 react.js를 백엔드에서 동작시켜서 페이지를 미리 만드는데 이는 component들을 render시킨다 Rendering이 끝났을 때 이는 HTML이 되고 next.js는 그 HTML을 페이지의 소스코드에 넣는다 그럼 유저는 자바스트립트와 react.js가 로딩되지 않았더라도 콘텐츠를 볼 수 있게 된다 그리고 react.js가 로딩되었을 때, 기본적으로 이미 존재하는 것들과 연결되어 일반적인 react.js 앱이 되는 것이다

** 주의할 점은 next.js가 동작한 react.js는 자바스크립트가 비활성되었을 때는 작동하지 못한다는 것이다

 

11. 페이지를 이동할 때 페이지 전체가 로딩되는 것을 막으려면 a 태그Link 태그로 감싸야 한다

import Link from "next/link"

export default function NavBar() {
    return (
        <nav>
            <Link href="/">
                <a>Home</a>
            </Link>
        </nav>
    )
}

 

12. next.js의 package.json을 확인해보면 next, react, reactdom이 모두 설치되어있는 것을 확인할 수 있다 우리가 CRA를 사용할 때 이를 모두 따로 설치해줬어야 했던 것과 달리 next.js에서는 설치 과정이 필요하지 않다

 

13. useRouter()은 다음 코드와 같이 페이지에 관한 Hook을 걸 수 있다

import Link from "next/link"
import { useRouter } from "next/router"

export default function NavBar() {
    const router = useRouter()
    return (
        <nav>
            <Link href="/">
                <a style={{color: router.pathname === "/" ? "red" : "blue"}}>Home</a>
            </Link>
            <Link href="/about">
                <a style={{color: router.pathname === "/about" ? "red" : "blue"}}>About</a>
            </Link>
        </nav>
    )
}

 

(+) useEffect가 두 번 실행되는 것을 막으려면 next.config.jsreactStrictModefalse로 바꿔준다