Panduan Lengkap Setup Next.js 14 dengan App Router, Server Actions, dan Tailwind CSS di 2026


Next.js tetap menjadi pilihan utama untuk membangun aplikasi React modern. Pada Juni 2026, Next.js 14 memperkenalkan App Router yang lebih fleksibel, Server Actions untuk logika backend langsung di komponen, serta integrasi bawaan dengan React Server Components. Tutorial ini memberi langkah demi langkah instalasi, konfigurasi, contoh kode, dan best practice untuk memulai proyek full‑stack dengan Next.js 14, TypeScript, dan Tailwind CSS.

1. Prasyarat

  • Node.js >= 20.10 (LTS)
  • npm atau yarn (versi 2+)
  • Git
  • Editor kode (VS Code direkomendasikan)

2. Membuat Proyek Baru

npx create-next-app@latest my-next14-app \
  --ts \
  --app \
  --eslint \
  --src-dir \
  --experimental-app-dir

Opsi --app mengaktifkan App Router, --ts menyiapkan TypeScript, dan --src-dir menempatkan semua kode di dalam folder src. Pada versi terakhir, flag --experimental-app-dir sudah tidak lagi diperlukan karena App Router menjadi default, namun tetap dipertahankan untuk kompatibilitas.

3. Instalasi Tailwind CSS (versi 3.4+)

cd my-next14-app
npm install -D tailwindcss@latest postcss@latest autoprefixer@latest
npx tailwindcss init -p

Ubah tailwind.config.js:

/** @type {import('tailwindcss').Config} */
module.exports = {
  content: [
    "./src/**/*.{js,ts,jsx,tsx}",
    "./app/**/*.{js,ts,jsx,tsx}"
  ],
  theme: {
    extend: {},
  },
  plugins: [],
};

Tambahkan directive Tailwind ke src/app/globals.css:

@tailwind base;
@tailwind components;
@tailwind utilities;

4. Struktur Folder Utama (App Router)

src/
│   app/
│   │   layout.tsx          # Root layout
│   │   page.tsx            # Home page
│   │   dashboard/
│   │       layout.tsx     # Nested layout
│   │       page.tsx       # Dashboard landing
│   │       actions.ts     # Server Actions
│   │   api/
│   │       users/route.ts # Route Handlers (REST API)
│   components/
│   lib/
│   utils/
│   styles/
│   ...

App Router memanfaatkan page.tsx sebagai entry point dan layout.tsx untuk pembungkus UI.

5. Membuat Root Layout dengan Tailwind

/* src/app/layout.tsx */
import './globals.css';
import type { Metadata } from 'next';

export const metadata: Metadata = {
  title: 'Next.js 14 Demo',
  description: 'Demo aplikasi dengan App Router, Server Actions, dan Tailwind CSS',
};

export default function RootLayout({ children }: { children: React.ReactNode }) {
  return (
    
      
        {children}
      
    
  );
}

6. Membuat Halaman Home Sederhana

/* src/app/page.tsx */
import Link from 'next/link';

export default function Home() {
  return (
    

Selamat Datang di Next.js 14

Demo modern dengan App Router dan Server Actions.

Masuk Dashboard
); }

7. Membuat Dashboard dengan Server Actions

Server Actions memungkinkan kita menulis fungsi async yang dijalankan di server langsung dari komponen client tanpa membuat API terpisah.

7.1. File actions.ts

/* src/app/dashboard/actions.ts */
'use server';
import { revalidatePath } from 'next/cache';

export async function addTodo(formData: FormData) {
  const title = formData.get('title')?.toString() ?? '';
  // Simulasi penyimpanan ke DB (misalnya Prisma)
  await new Promise((r) => setTimeout(r, 500));
  // Di lingkungan production, gunakan Prisma atau drizzle ORM
  console.log('Todo baru:', title);
  // Revalidate cache pada path ini agar UI terupdate
  revalidatePath('/dashboard');
}

7.2. Dashboard Layout

/* src/app/dashboard/layout.tsx */
export default function DashboardLayout({ children }: { children: React.ReactNode }) {
  return (
    
{children}
); }

7.3. Dashboard Page

/* src/app/dashboard/page.tsx */
import { addTodo } from './actions';
import { useState, useTransition } from 'react';

export default function Dashboard() {
  const [isPending, startTransition] = useTransition();
  const [todos, setTodos] = useState([]);

  const handleSubmit = (e: React.FormEvent) => {
    e.preventDefault();
    const form = e.target as HTMLFormElement;
    const formData = new FormData(form);
    startTransition(async () => {
      await addTodo(formData);
      setTodos((prev) => [...prev, formData.get('title') as string]);
      form.reset();
    });
  };

  return (
    

Dashboard

    {todos.map((t, i) => (
  • {t}
  • ))}
); }

Catatan: Pada produksi, gunakan database yang terhubung (Prisma, Drizzle, atau Supabase) dan ganti console.log dengan insert ke DB.

8. Menambahkan API Route (Route Handlers) untuk CRUD

/* src/app/api/users/route.ts */
import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';

// Dummy data – pada real‑world gunakan Prisma
let USERS = [{ id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }];

export async function GET(_req: NextRequest) {
  return NextResponse.json(USERS);
}

export async function POST(req: NextRequest) {
  const { name } = await req.json();
  const newUser = { id: Date.now(), name };
  USERS.push(newUser);
  return NextResponse.json(newUser, { status: 201 });
}

Route Handlers berada di dalam app/api dan otomatis menjadi endpoint /api/users.

9. Konfigurasi TypeScript & ESLint (Best Practice)

  • Pastikan tsconfig.json memiliki strict:true dan noUncheckedIndexedAccess:true.
  • Gunakan plugin eslint-plugin-next dan eslint-plugin-react-hooks untuk memaksa pola hooks yang benar.
  • Contoh .eslintrc.json:
    {
      "extends": ["next/core-web-vitals", "plugin:react-hooks/recommended"],
      "rules": {
        "react/react-in-jsx-scope": "off",
        "@next/next/no-html-link-for-pages": "error"
      }
    }
    

10. Deploy ke Vercel (Zero‑Config)

  1. Commit semua perubahan ke GitHub.
  2. Buka Vercel dan import repository.
  3. Vercel otomatis mendeteksi next.config.js dan mengaktifkan output: 'standalone' untuk performa.
  4. Set environment variable NODE_OPTIONS=--max-old-space-size=4096 bila diperlukan untuk build besar.

Setelah deploy, fitur Server Actions dan Route Handlers bekerja tanpa konfigurasi tambahan karena Vercel mendukung Edge Runtime secara native.

11. Optimasi Produksi

  • Image Optimization: gunakan next/image dengan loader default Vercel.
  • Static Generation untuk halaman yang tidak memerlukan data server dengan export const dynamic = 'force-static'; di atas komponen.
  • Cache Control: tambahkan header Cache-Control: public, max-age=31536000, immutable pada aset statis melalui next.config.js.
    module.exports = {
      async headers() {
        return [{
          source: '/:all*(svg|jpg|png|webp)',
          headers: [{ key: 'Cache-Control', value: 'public, max-age=31536000, immutable' }],
        }];
      },
    };
    

12. Debugging & Monitoring

Gunakan next dev dengan flag --turbo untuk hot‑reload yang lebih cepat. Tambahkan next-logger atau integrasi dengan Sentry (npm i @sentry/nextjs) untuk capture error production.

13. Penutup

Tutorial ini mencakup seluruh siklus: instalasi, konfigurasi Tailwind, penggunaan App Router, Server Actions, Route Handlers, serta deployment ke Vercel. Dengan pola ini, developer dapat membangun aplikasi full‑stack yang modern, cepat, dan siap skala.


Next.js 14 menyatukan kekuatan React Server Components, App Router, dan Server Actions dalam satu kerangka kerja yang mudah di‑setup. Ikuti langkah‑langkah di atas, pastikan kode TypeScript dalam mode strict, dan manfaatkan Vercel untuk deployment zero‑config. Dengan kombinasi Tailwind CSS untuk styling cepat serta praktik caching dan monitoring, aplikasi Anda akan siap bersaing di dunia Web Development 2026.
Tutorial step-by-step setup Next.js 14 dengan App Router, Server Actions, TypeScript, dan Tailwind CSS. Panduan lengkap termasuk konfigurasi, contoh kode, best practice, dan deployment ke Vercel bagi developer Web Development modern.

Programming,Software Engineering,Web Development,Next.js,React,Tailwind CSS,Server Actions

#Programming #SoftwareEngineering #WebDev #Tech #Coding

Posting Komentar

0 Komentar