Next.js Guide
react
nextjs
server-side rendering
static site generation
Installation
npx create-next-app@latest
# or
yarn create next-app
# or
pnpm create next-appFile-based Routing
- pages/index.js→- /
- pages/about.js→- /about
- pages/blog/[slug].js→- /blog/:slug
Dynamic Routes
// pages/posts/[id].js
import { useRouter } from 'next/router'
 
export default function Post() {
  const router = useRouter()
  const { id } = router.query
 
  return <p>Post: {id}</p>
}Link Component
import Link from 'next/link'
 
function Home() {
  return (
    <ul>
      <li>
        <Link href="/">Home</Link>
      </li>
      <li>
        <Link href="/about">About Us</Link>
      </li>
      <li>
        <Link href="/blog/hello-world">Blog Post</Link>
      </li>
    </ul>
  )
}Image Component
import Image from 'next/image'
 
function Avatar() {
  return <Image src="/me.png" alt="me" width="64" height="64" />
}API Routes
// pages/api/hello.js
export default function handler(req, res) {
  res.status(200).json({ name: 'John Doe' })
}getServerSideProps (Server-Side Rendering)
export async function getServerSideProps(context) {
  const res = await fetch(`https://api.example.com/data`)
  const data = await res.json()
 
  return {
    props: { data }, // will be passed to the page component as props
  }
}getStaticProps (Static Site Generation)
export async function getStaticProps(context) {
  const res = await fetch(`https://api.example.com/data`)
  const data = await res.json()
 
  return {
    props: { data }, // will be passed to the page component as props
    revalidate: 60, // In seconds
  }
}getStaticPaths (for Dynamic Routes)
export async function getStaticPaths() {
  const res = await fetch('https://api.example.com/posts')
  const posts = await res.json()
 
  const paths = posts.map((post) => ({
    params: { id: post.id },
  }))
 
  return { paths, fallback: false }
}Custom App
// pages/_app.js
import '../styles/globals.css'
 
function MyApp({ Component, pageProps }) {
  return <Component {...pageProps} />
}
 
export default MyAppCustom Document
// pages/_document.js
import { Html, Head, Main, NextScript } from 'next/document'
 
export default function Document() {
  return (
    <Html lang="en">
      <Head />
      <body>
        <Main />
        <NextScript />
      </body>
    </Html>
  )
}Environment Variables
- .env.localfor local environment variables
- Use process.env.NEXT_PUBLIC_VARIABLE_NAMEfor client-side variables
CSS Modules
// styles/Home.module.css
.container {
  padding: 0 2rem;
}
 
// pages/index.js
import styles from '../styles/Home.module.css'
 
export default function Home() {
  return <div className={styles.container}>Hello Next.js!</div>
}Remember, Next.js is constantly evolving. Always refer to the official Next.js documentation for the most up-to-date information and best practices.