Loading source
Pulling the file list, source metadata, and syntax-aware rendering for this listing.
Source from repo
Apply Next.js best practices for RSC boundaries, async APIs, routing, metadata, and optimization.
Files
Skill
Size
Entrypoint
Format
Open file
Syntax-highlighted preview of this file as included in the skill package.
functions.md
1# Functions23Next.js function APIs.45Reference: https://nextjs.org/docs/app/api-reference/functions67## Navigation Hooks (Client)89| Hook | Purpose | Reference |10|------|---------|-----------|11| `useRouter` | Programmatic navigation (`push`, `replace`, `back`, `refresh`) | [Docs](https://nextjs.org/docs/app/api-reference/functions/use-router) |12| `usePathname` | Get current pathname | [Docs](https://nextjs.org/docs/app/api-reference/functions/use-pathname) |13| `useSearchParams` | Read URL search parameters | [Docs](https://nextjs.org/docs/app/api-reference/functions/use-search-params) |14| `useParams` | Access dynamic route parameters | [Docs](https://nextjs.org/docs/app/api-reference/functions/use-params) |15| `useSelectedLayoutSegment` | Active child segment (one level) | [Docs](https://nextjs.org/docs/app/api-reference/functions/use-selected-layout-segment) |16| `useSelectedLayoutSegments` | All active segments below layout | [Docs](https://nextjs.org/docs/app/api-reference/functions/use-selected-layout-segments) |17| `useLinkStatus` | Check link prefetch status | [Docs](https://nextjs.org/docs/app/api-reference/functions/use-link-status) |18| `useReportWebVitals` | Report Core Web Vitals metrics | [Docs](https://nextjs.org/docs/app/api-reference/functions/use-report-web-vitals) |1920## Server Functions2122| Function | Purpose | Reference |23|----------|---------|-----------|24| `cookies` | Read/write cookies | [Docs](https://nextjs.org/docs/app/api-reference/functions/cookies) |25| `headers` | Read request headers | [Docs](https://nextjs.org/docs/app/api-reference/functions/headers) |26| `draftMode` | Enable preview of unpublished CMS content | [Docs](https://nextjs.org/docs/app/api-reference/functions/draft-mode) |27| `after` | Run code after response finishes streaming | [Docs](https://nextjs.org/docs/app/api-reference/functions/after) |28| `connection` | Wait for connection before dynamic rendering | [Docs](https://nextjs.org/docs/app/api-reference/functions/connection) |29| `userAgent` | Parse User-Agent header | [Docs](https://nextjs.org/docs/app/api-reference/functions/userAgent) |3031## Generate Functions3233| Function | Purpose | Reference |34|----------|---------|-----------|35| `generateStaticParams` | Pre-render dynamic routes at build time | [Docs](https://nextjs.org/docs/app/api-reference/functions/generate-static-params) |36| `generateMetadata` | Dynamic metadata | [Docs](https://nextjs.org/docs/app/api-reference/functions/generate-metadata) |37| `generateViewport` | Dynamic viewport config | [Docs](https://nextjs.org/docs/app/api-reference/functions/generate-viewport) |38| `generateSitemaps` | Multiple sitemaps for large sites | [Docs](https://nextjs.org/docs/app/api-reference/functions/generate-sitemaps) |39| `generateImageMetadata` | Multiple OG images per route | [Docs](https://nextjs.org/docs/app/api-reference/functions/generate-image-metadata) |4041## Request/Response4243| Function | Purpose | Reference |44|----------|---------|-----------|45| `NextRequest` | Extended Request with helpers | [Docs](https://nextjs.org/docs/app/api-reference/functions/next-request) |46| `NextResponse` | Extended Response with helpers | [Docs](https://nextjs.org/docs/app/api-reference/functions/next-response) |47| `ImageResponse` | Generate OG images | [Docs](https://nextjs.org/docs/app/api-reference/functions/image-response) |4849## Common Examples5051### Navigation5253Use `next/link` for internal navigation instead of `<a>` tags.5455```tsx56// Bad: Plain anchor tag57<a href="/about">About</a>5859// Good: Next.js Link60import Link from 'next/link'6162<Link href="/about">About</Link>63```6465Active link styling:6667```tsx68'use client'6970import Link from 'next/link'71import { usePathname } from 'next/navigation'7273export function NavLink({ href, children }) {74const pathname = usePathname()7576return (77<Link href={href} className={pathname === href ? 'active' : ''}>78{children}79</Link>80)81}82```8384### Static Generation8586```tsx87// app/blog/[slug]/page.tsx88export async function generateStaticParams() {89const posts = await getPosts()90return posts.map((post) => ({ slug: post.slug }))91}92```9394### After Response9596```tsx97import { after } from 'next/server'9899export async function POST(request: Request) {100const data = await processRequest(request)101102after(async () => {103await logAnalytics(data)104})105106return Response.json({ success: true })107}108```109