NextJS는 리액트를 좀 더 성능 좋게 사용할 수 있게 하는 프레임워크이므로 폴더 구조나 코드들에 제약이 있다. 따라서 NextJS를 사용하면서 지켜야할 기본적인 규칙들을 설명하고자 한다.
NextJS에서는 특정 페이지를 만들기 위해 pages
라는 폴더안에 js, tsx 파일을 만들어야한다. 이 때 파일명이 곧 라우팅 주소가 되며 페이지를 구성하기 위한 함수명은 자유롭게 지어도 된다.
컴포넌트는 무조건 export default
를 통해 이것이 컴포넌트임을 NextJS에게 알려야한다.
// O
export default function About() {
return <div>About Page</div>
}
// X
function About() {
return <div>About Page</div>
}
index.tsx
에 작성한다.// index.tsx
export default function Home() {
return <div>Hello World</div>
}
두가지 방법이 있다.
next/link
에서 제공하는 <Link />
컴포넌트를 사용한다. <Link href="/">
main
</Link>
// about 페이지 이동
<Link href="/about">
about
</Link>
💡 링크에 스타일을 입히거나 외부 링크로 이동이 필요한 경우에는 내부에 <a />
앵커 태그를 사용한다.
passHref
는 Link의 href
속성값을 하위컴포넌트로 전달하는 역할을 한다. 아래에서는 <a>외부 링크</a>
에 속성값을 전달하게된다.
<Link href="/">
<a className="styled-anchor">main</a>
</Link>
// 외부 링크 이동
<Link href="https://www.naver.com/" passHref>
<a target="_blank" rel="noopener noreferrer">
외부링크
</a>
</Link>
const router = useRouter();
const onClick = (id: number) => {
router.push(`/movies/${id}`)
}
만약 모든 페이지에 공통적으로 적용됐으면 하는 컴포넌트 (예를 들어 네비게이션바)나 스타일, 기능 등이 있으면 pages
폴더 내부에 _app.tsx
파일을 만들어 이 안에서 작성하면 된다.
import NavBar from "@/components/navbar";
// Custom App (_app.tsx)에서는 css파일을 적용할 수 있다.
import "@/styles/globals.css";
// Component와 pageProps 두 개의 인자를 받아준다.
export default function App({ Component, pageProps }) {
return <div><NavBar /><Component {...pageProps}/></div>;
}
NextJS에서는 module.css
가 아니면 .css
파일은 _app.tsx
를 제외하고 그 어떤곳에서도 사용할 수 없다.