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


Next.js 14 menjadi standar de‑facto untuk aplikasi React modern. Tutorial ini membimbing Anda step‑by‑step mulai instalasi, konfigurasi, hingga contoh kode server actions, lengkap dengan best practice untuk keamanan dan performa.

1. Persiapan Lingkungan

Pastikan Node.js versi 20.10+ dan npm atau Yarn terbaru terpasang. Anda dapat memeriksa versi dengan:

node -v
npm -v

Jika belum terpasang, unduh dari nodejs.org.

2. Membuat Proyek Next.js 14

npx create-next-app@latest my-next14-app --typescript
cd my-next14-app

Perintah di atas menghasilkan struktur folder standar dengan TypeScript, ESLint, dan Prettier terkonfigurasi.

3. Mengaktifkan App Router

Next.js 14 mengaktifkan app directory secara default. Pastikan folder app ada di root proyek. Jika Anda memulai dari template lama, buat folder baru:

mkdir -p app/page.tsx

Isi app/page.tsx dengan komponen sederhana:

export default function Home() {
  return (
    <main className="container mx-auto p-4">
      <h1 className="text-3xl font-bold">Selamat Datang di Next.js 14</h1>
    </main>
  );
}

4. Menambahkan Server Actions

Server Actions memungkinkan Anda menulis fungsi server langsung di komponen React tanpa API route terpisah. Buat file app/contact/action.ts:

"use server";
import nodemailer from "nodemailer";

export async function sendContact(formData: FormData) {
  const name = formData.get("name") as string;
  const email = formData.get("email") as string;
  const message = formData.get("message") as string;

  // Validasi sederhana
  if (!name || !email || !message) {
    throw new Error("Semua field wajib diisi");
  }

  // Transporter menggunakan variabel lingkungan
  const transporter = nodemailer.createTransport({
    host: process.env.SMTP_HOST,
    port: Number(process.env.SMTP_PORT),
    secure: true,
    auth: {
      user: process.env.SMTP_USER,
      pass: process.env.SMTP_PASS,
    },
  });

  await transporter.sendMail({
    from: `${name} <${email}>`,
    to: process.env.CONTACT_RECEIVER,
    subject: "Pesan Kontak dari Next.js 14",
    text: message,
  });

  return { success: true };
}

Selanjutnya, buat UI formulir di app/contact/page.tsx yang memanggil action ini:

"use client";
import { useState } from "react";
import { sendContact } from "./action";

export default function ContactPage() {
  const [status, setStatus] = useState(null);

  async function handleSubmit(event) {
    event.preventDefault();
    const formData = new FormData(event.target);
    try {
      const result = await sendContact(formData);
      setStatus(result.success ? "Berhasil mengirim!" : "Gagal");
    } catch (e) {
      setStatus(e.message);
    }
  }

  return (
    <main className="max-w-xl mx-auto p-4">
      <h2 className="text-2xl font-semibold mb-4">Hubungi Kami</h2>
      <form onSubmit={handleSubmit} className="space-y-4">
        <input name="name" type="text" placeholder="Nama" required className="w-full p-2 border" />
        <input name="email" type="email" placeholder="Email" required className="w-full p-2 border" />
        <textarea name="message" placeholder="Pesan" required className="w-full p-2 border" rows="4" />
        <button type="submit" className="bg-blue-600 text-white px-4 py-2 rounded">Kirim</button>
      </form>
      {status && <p className="mt-4">{status}</p>}
    </main>
  );
}

Dengan "use server" di file action, kode dijalankan di server tanpa menulis endpoint terpisah.

5. Konfigurasi Variabel Lingkungan

Buat .env.local di root proyek:

SMTP_HOST=smtp.mailtrap.io
SMTP_PORT=465
SMTP_USER=your_user
SMTP_PASS=your_pass
CONTACT_RECEIVER=admin@example.com
NEXT_PUBLIC_BASE_URL=http://localhost:3000

Jangan pernah commit file ini ke repo; tambahkan ke .gitignore.

6. Menyiapkan Linting & Formatting (Best Practice)

npm install -D eslint eslint-config-next prettier
npx next lint --fix

Pastikan eslint dan prettier dijalankan pada pre‑commit dengan husky:

npm install -D husky lint-staged
npx husky install
npx husky add .husky/pre-commit "npx lint-staged"

# .lintstagedrc.json
{
  "**/*.{js,jsx,ts,tsx}": ["eslint --fix", "prettier --write"]
}

7. Optimasi Performa

  • Image Optimization: gunakan next/image dengan loader default; pastikan domains di next.config.js mencakup CDN yang dipakai.
  • Route Segment Caching: tambahkan export const dynamic = "force-static"; pada halaman yang tidak memerlukan data dinamis.
  • Edge Runtime: Deploy ke Vercel atau Cloudflare Workers dengan export const runtime = "edge"; untuk latency rendah.

8. Deploy ke Vercel (Zero‑Config)

Login ke Vercel, pilih New Project, sambungkan ke repo GitHub, dan Vercel otomatis mendeteksi Next.js 14. Pastikan variabel lingkungan diset di dashboard Vercel.

9. Testing & Monitoring

Tambahkan unit test dengan Jest dan React Testing Library:

npm install -D jest @testing-library/react @testing-library/jest-dom @types/jest ts-jest
npx ts-jest config:init

Contoh test untuk ContactPage:

import { render, screen, fireEvent } from "@testing-library/react";
import ContactPage from "./page";

test("form renders and submits", async () => {
  render();
  fireEvent.change(screen.getByPlaceholderText(/Nama/i), { target: { value: "Budi" } });
  fireEvent.change(screen.getByPlaceholderText(/Email/i), { target: { value: "budi@example.com" } });
  fireEvent.change(screen.getByPlaceholderText(/Pesan/i), { target: { value: "Halo" } });
  fireEvent.click(screen.getByRole("button", { name: /Kirim/i }));
  // Mock sendContact or use MSW to intercept fetch
});

Gunakan monitoring Real User Monitoring (RUM) seperti Vercel Analytics atau Sentry untuk error tracking.

10. Keamanan Tambahan

  • Aktifkan Content‑Security‑Policy di next.config.js melalui headers.
  • Gunakan rate-limit pada Server Actions dengan upstash/ratelimit bila aplikasi publik.
  • Validasi input server‑side, jangan mengandalkan hanya pada client validation.

11. Ringkasan Step‑by‑Step

  1. Pasang Node.js 20+.
  2. Generate proyek Next.js 14 dengan TypeScript.
  3. Pastikan folder app ada (App Router).
  4. Buat Server Action sendContact di app/contact/action.ts.
  5. Bangun UI form di app/contact/page.tsx dan hubungkan action.
  6. Set variabel lingkungan di .env.local.
  7. Konfigurasi ESLint, Prettier, dan Husky untuk kualitas kode.
  8. Optimasi gambar, caching, dan gunakan Edge runtime bila memungkinkan.
  9. Deploy ke Vercel, set env di dashboard.
  10. Tambah unit test, monitoring, dan security headers.

Ikuti urutan ini, dan Anda akan memiliki aplikasi Next.js 14 yang modern, aman, serta siap skala.


Next.js 14 dengan App Router dan Server Actions menyederhanakan arsitektur full‑stack tanpa mengorbankan performa. Dengan mengikuti tutorial ini—mulai instalasi, konfigurasi environment, penulisan Server Action, hingga deployment di Vercel—Anda tidak hanya menghasilkan aplikasi yang cepat, tetapi juga menjaga standar keamanan dan kualitas kode yang tinggi. Terapkan best practice linting, testing, serta monitoring untuk menjaga kesehatan proyek jangka panjang.
Panduan lengkap setup Next.js 14 dengan App Router, Server Actions, dan best practice keamanan serta performa. Langkah demi langkah untuk developer 2026.

Programming,Software Engineering,Web Development,Next.js 14,Server Actions,App Router

#Programming #SoftwareEngineering #WebDev #Tech #Coding

Posting Komentar

0 Komentar