๐ Next.js Documentation โ
๐ Introduction to Next.js โ
What is Next.js? A React-based framework for building full-stack and production-grade web applications with server-side rendering (SSR), static site generation (SSG), and API routes.
Key Features
- File-based routing
- Hybrid SSR + SSG support
- API routes (backend support)
- Built-in CSS & Sass support
- Image Optimization
- Fast refresh & hot reloading
- TypeScript support out of the box
๐ Getting Started โ
Installation โ
bash
npx create-next-app@latest my-app
cd my-app
npm run dev
App runs on
http://localhost:3000
Project Structure โ
my-app/
โโโ pages/
โ โโโ index.js
โ โโโ about.js
โ โโโ api/
โโโ public/
โโโ styles/
โโโ next.config.js
โโโ package.json
๐ Routing (Pages) โ
- Pages = Routes (
pages/index.js โ /
) - Dynamic Routes:
/pages/post/[id].js โ /post/1
js
// pages/post/[id].js
import { useRouter } from 'next/router';
export default function Post() {
const router = useRouter();
const { id } = router.query;
return <p>Post: {id}</p>;
}
- Catch-all Routes
[...slug].js โ /a/b/c
๐ ๏ธ Pre-rendering โ
Static Generation (SSG) โ
js
export async function getStaticProps() {
return { props: { data: 'Hello World' } };
}
Static Generation with Paths โ
js
export async function getStaticPaths() {
return { paths: [{ params: { id: '1' } }], fallback: false };
}
Server-Side Rendering (SSR) โ
js
export async function getServerSideProps() {
return { props: { data: 'SSR Data' } };
}
๐ผ๏ธ Image Optimization โ
js
import Image from 'next/image';
<Image src="/me.png" alt="Me" width={500} height={500} />
โจ CSS and Styling โ
- Global CSS โ
pages/_app.js
js
import '../styles/global.css';
- CSS Modules
js
import styles from './Home.module.css';
<p className={styles.title}>Hello</p>
- Sass Support Install Sass โ
npm install sass
โ๏ธ API Routes (Backend Support) โ
js
// pages/api/hello.js
export default function handler(req, res) {
res.status(200).json({ message: 'Hello API' });
}
๐ Environment Variables โ
.env.local
NEXT_PUBLIC_API_URL=https://api.example.com
- Usage:
process.env.NEXT_PUBLIC_API_URL
๐ Data Fetching with SWR โ
bash
npm install swr
js
import useSWR from 'swr';
const fetcher = url => fetch(url).then(res => res.json());
const { data, error } = useSWR('/api/user', fetcher);
๐ Deployment โ
Vercel (Recommended)
npx vercel
Custom Server Deployment
bashnpm run build npm start
๐งฉ Advanced Concepts โ
Custom _app.js
โ
js
export default function MyApp({ Component, pageProps }) {
return <Component {...pageProps} />;
}
Custom _document.js
(HTML structure) โ
js
import { Html, Head, Main, NextScript } from 'next/document';
export default function Document() {
return (
<Html>
<Head />
<body>
<Main />
<NextScript />
</body>
</Html>
);
}
๐ API Middleware (Advanced) โ
js
export default function handler(req, res) {
if (req.method === 'POST') {
res.status(200).json({ message: 'POST Success' });
} else {
res.status(405).end(); // Method Not Allowed
}
}
โก Middleware (Edge Functions) โ
js
// middleware.ts
import { NextResponse } from 'next/server';
export function middleware(request) {
return NextResponse.redirect(new URL('/login', request.url));
}
๐ ๏ธ next.config.js (Configuration) โ
js
module.exports = {
images: { domains: ['example.com'] },
reactStrictMode: true,
};
๐งน Incremental Static Regeneration (ISR) โ
js
export async function getStaticProps() {
return {
props: { data: 'Hello ISR' },
revalidate: 10, // Regenerate page every 10 seconds
};
}
๐ฅ API Authentication (with NextAuth) โ
bash
npm install next-auth
js
// pages/api/auth/[...nextauth].js
import NextAuth from 'next-auth';
export default NextAuth({ providers: [] });
๐ฆ TypeScript Support โ
bash
touch tsconfig.json
npm run dev
- Files become
.tsx
,.ts
- Types auto-generated
๐ Best Practices โ
- Use ISR for dynamic + fast updates
- Prefer CSS Modules or Tailwind CSS for scalable styling
- Use SWR or React Query for client data fetching
- Host on Vercel for built-in optimizations
- Use API Routes for lightweight backend tasks