Setelah memahami struktur dasar Next.js, layout, dan pengambilan data, kini saatnya kita masuk ke komponen penting dalam web modern: formulir input, validasi data pengguna, dan pengelolaan state (data dinamis) di sisi frontend.


🎯 Tujuan Part 3


📥 1. Membuat Form Input Dasar di Next.js

Contoh form sederhana: formulir kontak pengguna.

File: app/contact/page.jsx

'use client';

import { useState } from 'react';

export default function ContactPage() {
  const [name, setName] = useState('');
  const [message, setMessage] = useState('');

  const handleSubmit = (e) => {
    e.preventDefault();
    alert(`Nama: ${name}\nPesan: ${message}`);
  };

  return (
    <div className="max-w-md mx-auto p-4 bg-white rounded shadow">
      <h2 className="text-2xl font-bold mb-4">Kontak Kami</h2>
      <form onSubmit={handleSubmit} className="space-y-4">
        <input
          type="text"
          placeholder="Nama Anda"
          value={name}
          onChange={(e) => setName(e.target.value)}
          className="w-full border p-2 rounded"
          required
        />
        <textarea
          placeholder="Pesan Anda"
          value={message}
          onChange={(e) => setMessage(e.target.value)}
          className="w-full border p-2 rounded"
          required
        />
        <button
          type="submit"
          className="bg-blue-600 text-white px-4 py-2 rounded hover:bg-blue-700"
        >
          Kirim
        </button>
      </form>
    </div>
  );
}

✅ 2. Validasi Form Input

Validasi sangat penting untuk mencegah data kosong atau salah format.

Tambahkan validasi sederhana:

const handleSubmit = (e) => {
  e.preventDefault();
  if (name.length < 3) {
    alert("Nama minimal 3 karakter");
    return;
  }
  if (message.length < 10) {
    alert("Pesan terlalu singkat");
    return;
  }
  alert(`Nama: ${name}\nPesan: ${message}`);
};

Untuk validasi lebih kompleks, gunakan library seperti React Hook Form atau Yup.


🧠 3. Menggunakan State Lokal dengan useState

Hook useState adalah cara utama menyimpan nilai dinamis di React/Next.js.

Contoh:

const [count, setCount] = useState(0);
<button onClick={() => setCount(count + 1)}>
  Klik Saya ({count})
</button>

🌐 4. Mengelola State Global dengan Context API

Jika kamu punya state yang dipakai di banyak halaman atau komponen, gunakan Context API.

Langkah Singkat:

  1. Buat file context: app/context/UserContext.jsx
  2. Buat provider:
'use client';
import { createContext, useState, useContext } from 'react';

const UserContext = createContext();

export const UserProvider = ({ children }) => {
  const [user, setUser] = useState(null);

  return (
    <UserContext.Provider value={{ user, setUser }}>
      {children}
    </UserContext.Provider>
  );
};

export const useUser = () => useContext(UserContext);
  1. Bungkus di layout.jsx:
import { UserProvider } from './context/UserContext';

export default function RootLayout({ children }) {
  return (
    <html lang="en">
      <body>
        <UserProvider>{children}</UserProvider>
      </body>
    </html>
  );
}
  1. Gunakan di halaman lain:
import { useUser } from '../context/UserContext';

const { user, setUser } = useUser();

🚨 Tips Tambahan untuk Produksi


📌 Studi Kasus Nyata

Jika Anda sedang membangun aplikasi seperti:

Maka penggunaan form + validasi + state adalah pondasi utama.


🚀 Siap Bangun Aplikasi Web Modern?

Elektra Network Vision membantu membangun sistem web yang cepat, aman, dan siap produksi menggunakan Next.js, termasuk form validasi, dashboard interaktif, dan koneksi API.

🌐 elektranetworkvision.com

Leave a Reply

Your email address will not be published. Required fields are marked *