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.jsonmemilikistrict:truedannoUncheckedIndexedAccess:true. - Gunakan plugin
eslint-plugin-nextdaneslint-plugin-react-hooksuntuk 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)
- Commit semua perubahan ke GitHub.
- Buka Vercel dan import repository.
- Vercel otomatis mendeteksi
next.config.jsdan mengaktifkanoutput: 'standalone'untuk performa. - Set environment variable
NODE_OPTIONS=--max-old-space-size=4096bila 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/imagedengan 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, immutablepada aset statis melaluinext.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
0 Komentar