pages/
하위에 있는 페이지 단위들은 Next.js 서버에서 SSR 형태로 HTML 문서를 제공// package init
npm init -y
// react, next install
npm install react react-dom next
// typescript
npm install --save-dev typescript @types/react @types/react-dom @types/node
// pages directory add
mkdir pages
package.json
을 수정합니다."scripts": {
"dev": "next",
"build": "next build",
"start": "next start",
},
tsconfig.json
파일 생성const Index = () => (
<div>
<p>Hello Next.js</p>
</div>
);
export default Index;
npm run dev
=> http://localhost:3000
에서 확인할 수 있습니다.tsconfig.json
파일 내부에 자동으로 next가 타입스크립트 설정을 채워줍니다.next-env.d.ts
파일도 생성pages directory 하위에 컴포넌트를 생성하면 자동으로 Path Routing이 되는 것을 확인할 수 있습니다.
pages/room.tsx
const Index = () => (
<div>
<p>Hello a room!</p>
</div>
);
export default Index;
http://localhost:3000/room
에서 SSR 형태로 페이지를 확인할 수 있습니다.[id].tsx
라는 이름을 가진 컴포넌트를 생성합니다.pages/dynamic/[id].tsx
import { useRouter } from "next/dist/client/router";
// 접근해보기
// http://localhost:3000/dynamic/1
// http://localhost:3000/dynamic/abc
const Dynamic = () => {
// useRouter 불러오기
const router = useRouter();
// path로 전달받은 value 가져오기
const { id } = router.query;
const moveHome = () => {
// router.push를 활용해 페이지 이동 가능
router.push("/");
};
return (
<div>
<button onClick={moveHome}>홈으로</button>
<p>Hello Dynamic-{id}</p>
</div>
};
export default Dynamic;
404.tsx
파일 생성const Error = () => {
return <div>404 Error!!!</div>;
};
export default Error;
_error.tsx
파일 생성404.tsx
가 존재하지 않을 경우 클라이언트 에러도 여기서 처리합니다.function Error({ statusCode }) {
return (
<p>
{statusCode
? `An error ${statusCode} occurred on server`
: "An error occurred on client"}
</p>
);
}
Error.getInitialProps = ({ res, err }) => {
const statusCode = res ? res.statusCode : err ? err.statusCode : 404;
return { statusCode };
};
export default Error;
.env.development
/ .env.production
생성NEXT_PUBLIC_변수명
NEXT_PUBLIC_
접두사를 사용하지 않으면 클라이언트 코드에서 환경 변수 엑세스 불가process.env.변수명
으로 접근const Index = () => {
// env test
console.log("client:" + process.env.NEXT_PUBLIC_VALUE);
...
}
getServerSideProps()
는 서버에서 실행되는 메소드이며 나중에 자세히 학습하게 됩니다!export const getServerSideProps: GetServerSideProps = async (context) => {
// env test
console.log("server: " + process.env.NAME);
....
};