Next.js 14 menjadi standar baru untuk pengembangan web full‑stack React. Tutorial ini membimbing Anda step‑by‑step memasang, mengkonfigurasi, dan mengoptimalkan proyek Next.js 14, lengkap dengan contoh kode, best practice, serta tips keamanan dan performa.
1. Prasyarat dan Persiapan Lingkungan
Pastikan Anda memiliki:
- Node.js v20.x (LTS) – instalasi via
nvm install 20 - npm v10 atau Yarn v4 (pnpm juga didukung)
- Git untuk version control
- Editor kode – VS Code dengan ekstensi Next.js dan ESLint
- Akun Vercel (opsional) untuk deployment satu‑klik
2. Membuat Proyek Next.js 14 Baru
Jalankan perintah berikut untuk mem‑bootstrap aplikasi:
npx create-next-app@latest my-next14-app --ts --eslint --app
cd my-next14-app
Opsi --ts menyiapkan TypeScript, --eslint menambahkan konfigurasi linting, dan --app mengaktifkan App Router secara default.
3. Struktur Direktori App Router
Setelah pembuatan, perhatikan struktur utama:
app/
layout.tsx # Layout global
page.tsx # Halaman beranda
(dashboard)/
layout.tsx # Layout nested
page.tsx # Dashboard utama
settings/
page.tsx # Sub‑route
api/
route.ts # API Route (Server Action)
App Router menggantikan pages/ dan memberikan kemampuan streaming, server components, dan server actions.
4. Instalasi Dependensi Tambahan
Untuk UI dan query data, tambahkan paket berikut:
npm i @tanstack/react-query@latest
npm i tailwindcss@latest postcss@latest autoprefixer@latest
npx tailwindcss init -p
Konfigurasikan tailwind.config.js dengan jalur app/**/*.{js,ts,jsx,tsx} agar Tailwind memproses semua file.
5. Konfigurasi Tailwind dan Global CSS
Update app/globals.css:
@tailwind base;
@tailwind components;
@tailwind utilities;
Pastikan layout.tsx meng‑importnya:
import "./globals.css";
6. Membuat Server Action (API Route) dengan Next.js 14
Server Action memungkinkan pemanggilan fungsi server langsung dari komponen client tanpa menulis endpoint terpisah. Buat file app/api/submit-contact/route.ts:
import { NextResponse } from "next/server";
export async function POST(request: Request) {
const { name, email, message } = await request.json();
// Validasi sederhana
if (!email || !message) {
return NextResponse.json({ error: "Invalid payload" }, { status: 400 });
}
// Simulasi penyimpanan – pada produksi gunakan DB atau layanan queue
console.log("Contact form submitted:", { name, email, message });
return NextResponse.json({ success: true });
}
Catatan: Server Action di‑export sebagai POST (bisa juga GET, PUT, DELETE).
7. Membuat Form Client dengan Server Action
Buat file app/contact/page.tsx:
"use client";
import { useState } from "react";
export default function ContactPage() {
const [status, setStatus] = useState("");
async function handleSubmit(e: React.FormEvent) {
e.preventDefault();
const form = e.target as HTMLFormElement;
const data = {
name: (form.elements.namedItem("name") as HTMLInputElement).value,
email: (form.elements.namedItem("email") as HTMLInputElement).value,
message: (form.elements.namedItem("message") as HTMLTextAreaElement).value,
};
const res = await fetch("/api/submit-contact", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(data),
});
const json = await res.json();
setStatus(json.success ? "Terima kasih!" : "Gagal mengirim.");
}
return (
Hubungi Kami
{status && {status}
}
);
}
Komponen di‑tag "use client" karena berinteraksi dengan DOM.
8. Menambahkan React Query untuk Data Fetching
Buat layanan API sederhana: app/api/posts/route.ts yang mengembalikan list post statis.
import { NextResponse } from "next/server";
const posts = [
{ id: 1, title: "Next.js 14 Dirilis", author: "Tim Vercel" },
{ id: 2, title: "Server Actions di Produksi", author: "Jane Doe" },
];
export async function GET() {
return NextResponse.json(posts);
}
Di client, buat hook React Query:
"use client";
import { useQuery } from "@tanstack/react-query";
import axios from "axios";
export function usePosts() {
return useQuery({
queryKey: ["posts"],
queryFn: async () => {
const { data } = await axios.get("/api/posts");
return data;
},
staleTime: 1000 * 60, // 1 menit
});
}
Gunakan hook di halaman app/dashboard/page.tsx:
import { usePosts } from "@/components/usePosts";
export default function Dashboard() {
const { data, isLoading, error } = usePosts();
if (isLoading) return Loading...
;
if (error) return Error loading posts.
;
return (
Latest Posts
{data.map((post: any) => (
- {post.title} — {post.author}
))}
);
}
9. Konfigurasi ESLint, Prettier, dan TypeScript Strict Mode
Pastikan eslint.config.mjs meng‑extend next/core-web-vitals dan menambahkan plugin react-hooks. Aktifkan "strict": true di tsconfig.json untuk meningkatkan type safety.
10. Optimasi Performance dengan Streaming dan Edge Runtime
Next.js 14 mendukung Edge Runtime untuk API yang sangat cepat. Tambahkan header pada route:
export const runtime = "edge"; // di atas function GET/POST
Gunakan export const dynamic = "force-static"; pada halaman yang tidak membutuhkan data dinamis untuk menghasilkan HTML statik pada build.
11. Penambahan Security Headers
Di next.config.mjs tambahkan:
export default defineConfig({
async headers() {
return [{
source: '/(.*)',
headers: [
{ key: 'Content-Security-Policy', value: "default-src 'self'; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline';" },
{ key: 'X-Content-Type-Options', value: 'nosniff' },
{ key: 'Referrer-Policy', value: 'strict-origin-when-cross-origin' },
{ key: 'Permissions-Policy', value: 'camera=(), microphone=()' },
],
}];
},
});
12. Deploy ke Vercel (atau Netlify) dalam 2 Menit
1. Push repo ke GitHub.
2. Buka dashboard Vercel, pilih New Project, sambungkan repo, dan pilih Next.js sebagai framework.
3. Vercel otomatis mendeteksi next.config.mjs, meng‑install dependencies, dan melakukan build dengan next build.
4. Setelah deploy, akses https://your-project.vercel.app.
Jika menggunakan Docker, contoh Dockerfile:
FROM node:20-alpine AS builder
WORKDIR /app
COPY . .
RUN npm ci && npm run build
FROM node:20-alpine AS runtime
WORKDIR /app
COPY --from=builder /app/.next ./.next
COPY --from=builder /app/public ./public
COPY --from=builder /app/package.json ./
EXPOSE 3000
CMD ["npm", "start"]
13. Best Practice Tambahan
- File System Routing: Hindari nama folder dengan spasi atau karakter khusus.
- Data Fetching: Gunakan
fetchnative di server components; React Query hanya di client. - Cache Control: Manfaatkan
revalidatepadafetchuntuk ISR (Incremental Static Regeneration). - Testing: Tambahkan Jest + React Testing Library; contoh
__tests__/contact.test.tsx. - Monitoring: Integrasikan Vercel Analytics atau Sentry untuk error tracking.
14. Troubleshooting Umum
Error: "module not found: react" – Pastikan Node_modules tidak rusak; jalankan npm ci ulang.
Server Action tidak dipanggil – Pastikan file berada di app/api/ dan meng‑export fungsi HTTP (GET, POST, dll).
Tailwind tidak ter‑apply – Periksa tailwind.config.js `content` array mencakup app/**/*.{js,ts,jsx,tsx}.
15. Kesimpulan
Dengan mengikuti langkah‑langkah di atas, Anda memiliki aplikasi Next.js 14 modern yang memanfaatkan App Router, Server Actions, React Query, dan praktik keamanan serta performa terbaru. Proyek siap dikembangkan lebih lanjut, di‑scale dengan edge network, dan di‑deploy ke Vercel atau platform container pilihan.
Next.js 14 menawarkan kerangka kerja yang menyatukan UI, API, dan logika server dalam satu basis kode yang mudah dipelihara. Mengikuti tutorial ini, Anda tidak hanya mendapatkan proyek yang berfungsi, tetapi juga fondasi kuat untuk mengadopsi best practice dalam Programming, Software Engineering, dan Web Development modern.
Tutorial step-by-step setup Next.js 14 dengan App Router, Server Actions, React Query, Tailwind, security headers, dan deployment Vercel. Cocok untuk developer Web Development yang ingin mengoptimalkan proyek modern.
Programming,Software Engineering,Web Development,Next.js 14,App Router,Server Actions,React Query,Performance Optimization
#Programming #SoftwareEngineering #WebDev #Tech #Coding
0 Komentar