Next.js 14 menjadi standar baru bagi developer React yang menginginkan rendering hybrid, data fetching terbaru, dan integrasi AI yang mudah. Tutorial ini mengajak Anda memulai proyek dari nol, mengkonfigurasi App Router, memanfaatkan Server Actions, serta menerapkan best practice untuk keamanan dan performa.
Prasyarat
Sebelum memulai, pastikan Anda memiliki:
- Node.js v20.10+ dan npm 10.x atau pnpm (disarankan).
- Git untuk version control.
- Editor kode – VS Code dengan ekstensi ESLint, Prettier, dan Tailwind CSS IntelliSense.
- Akun Vercel (untuk deployment) dan OpenAI API key (jika ingin mencoba AI integration).
1. Membuat Proyek Next.js 14 Baru
- Inisialisasi proyek dengan pnpm (atau npm):
Pilih opsi App Router (recommended) ketika diminta.pnpm create next-app@latest my-next14-app --typescript - Masuk ke direktori dan instal dependensi tambahan:
cd my-next14-app pnpm add tailwindcss@latest postcss@latest autoprefixer@latest pnpm add -D @next/bundle-analyzer eslint-config-next - Inisialisasi Tailwind CSS (mengikuti panduan resmi 2024):
Padanpx tailwindcss init -ptailwind.config.js, aktifkanappDir: truedan tambahkan jalur file:
Padamodule.exports = { content: [ "./app/**/*.{js,ts,jsx,tsx}", "./components/**/*.{js,ts,jsx,tsx}" ], theme: { extend: {} }, plugins: [], };globals.css, import Tailwind directives.
2. Struktur Dasar App Router
Next.js 14 menggunakan folder app/ sebagai root. Berikut contoh struktur minimal:
app/
├─ layout.tsx # Layout global
├─ page.tsx # Home page
├─ dashboard/
│ ├─ layout.tsx
│ └─ page.tsx
└─ api/
└─ hello/route.ts # Server Action contoh
2.1 layout.tsx (global)
export default function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
{children}
);
}
2.2 page.tsx (home)
import Link from "next/link";
export default function HomePage() {
return (
Selamat Datang di Next.js 14
Buka Dashboard
);
}
3. Implementasi Server Actions
Server Actions memperbolehkan Anda menulis fungsi async yang dijalankan di server tanpa menulis API route terpisah. Berikut contoh sederhana untuk menyimpan komentar ke database SQLite menggunakan better-sqlite3.
3.1 Instalasi dependensi database
pnpm add better-sqlite3
pnpm add -D @types/better-sqlite3
3.2 Membuat file app/api/comments/route.ts
"use server"; // tanda Server Action
import Database from "better-sqlite3";
const db = new Database("./data/comments.db");
// Inisialisasi tabel (eksekusi sekali)
if (!db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='comments'").get()) {
db.exec("CREATE TABLE comments (id INTEGER PRIMARY KEY AUTOINCREMENT, text TEXT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP)");
}
export async function addComment(comment: string) {
const stmt = db.prepare("INSERT INTO comments (text) VALUES (?)");
const info = stmt.run(comment);
return { id: info.lastInsertRowid, text: comment };
}
3.3 Menggunakan Action di komponen UI
"use client";
import { useState, useTransition } from "react";
import { addComment } from "@/app/api/comments/route";
export default function CommentForm() {
const [text, setText] = useState("");
const [isPending, startTransition] = useTransition();
const handleSubmit = async (e: React.FormEvent) => {
e.preventDefault();
startTransition(async () => {
await addComment(text);
setText("");
});
};
return (
);
}
4. Optimasi Performa dengan next/image dan next/font
- next/image: gunakan
fillatauresponsiveuntuk gambar hero. Contoh:import Image from "next/image"; export default function Hero() { return ( ); }Next.js 14
- next/font: loading font secara otomatis tanpa FOUT.
import { Inter } from "next/font/google"; const inter = Inter({ subsets: ["latin"] }); export default function RootLayout({ children }) { return ( {/* ... */} ); }
5. Keamanan & Best Practice
- SSR sanitization: gunakan paket
dompurifyuntuk membersihkan HTML yang di‑render secara dinamis. - Rate limiting pada Server Actions dengan
lru-cacheatau middleware Vercel Edge.import LRU from "lru-cache"; const cache = new LRU({ max: 500, ttl: 60 * 1000 }); export async function addComment(comment) { const ip = request.ip; // via edge middleware const key = `${ip}:comment`; if (cache.has(key)) throw new Error("Too many requests"); cache.set(key, true); // lanjutkan insert } - Environment variables – simpan
OPENAI_API_KEYdi.env.localdan akses lewatprocess.env. Jangan pernah commit file .env.
6. Integrasi OpenAI API (Opsional)
Berikut contoh Server Action yang memanggil gpt-4o-mini untuk menghasilkan judul artikel otomatis.
"use server";
import OpenAI from "openai";
const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
export async function generateTitle(topic: string) {
const response = await openai.chat.completions.create({
model: "gpt-4o-mini",
messages: [{ role: "system", content: "Buat judul singkat yang menarik untuk artikel tentang " + topic }],
max_tokens: 10,
});
return response.choices[0].message.content.trim();
}
Gunakan di komponen client:
"use client";
import { useState, useTransition } from "react";
import { generateTitle } from "@/app/api/ai/route";
export default function TitleGenerator() {
const [topic, setTopic] = useState("");
const [title, setTitle] = useState("");
const [isPending, startTransition] = useTransition();
const handleGenerate = () => {
startTransition(async () => {
const t = await generateTitle(topic);
setTitle(t);
});
};
return (
setTopic(e.target.value)}
placeholder="Masukkan topik..."
className="border p-2 w-full"
/>
{title && {title}
}
);
}
7. Build, Analisis Bundle, dan Deploy
- Analisis bundle dengan Next.js Bundle Analyzer:
Jalankan// next.config.js const withBundleAnalyzer = require("@next/bundle-analyzer")({ enabled: process.env.ANALYZE === "true", }); module.exports = withBundleAnalyzer({ reactStrictMode: true, experimental: { appDir: true }, });ANALYZE=true pnpm builduntuk melihat laporan di.next/analyze. - Build produksi:
Pastikan tidak ada warning ESLint atau TypeScript.pnpm run build && pnpm start - Deploy ke Vercel – hubungkan repositori GitHub, pilih Next.js sebagai framework, dan Vercel otomatis akan menjalankan
pnpm install && pnpm build.- Aktifkan Preview Deployments untuk setiap Pull Request.
- Tambahkan env var
OPENAI_API_KEYmelalui dashboard Vercel.
8. Monitoring & Observability
Gunakan Vercel Analytics atau integrasi @upstash/redis untuk mencatat request latency, error rate, dan usage token OpenAI.
9. Kesimpulan
Dengan langkah‑langkah di atas Anda telah menyiapkan aplikasi Next.js 14 modern yang memanfaatkan App Router, Server Actions, Tailwind CSS, serta integrasi AI. Terapkan best practice keamanan, lakukan bundle analysis, dan gunakan CI/CD Vercel untuk alur kerja yang mulus. Selamat membangun aplikasi React yang cepat, scalable, dan future‑ready!
Next.js 14 memberikan toolkit lengkap untuk membangun aplikasi full‑stack dengan performa tinggi dan developer experience yang luar biasa. Ikuti tutorial ini, sesuaikan dengan kebutuhan proyek Anda, dan manfaatkan ekosistem Vercel serta OpenAI untuk menambah nilai inovatif pada produk Anda.
Panduan step-by-step setup Next.js 14 dengan App Router, Server Actions, Tailwind CSS, dan integrasi OpenAI. Termasuk best practice, security, dan deployment Vercel.
Programming,Software Engineering,Web Development,Next.js 14,Server Actions,App Router,Tailwind CSS,OpenAI API
#Programming #SoftwareEngineering #WebDev #Tech #Coding
0 Komentar