0Pricing
React Academy · Pelajaran

React Actions & useActionState

Definisikan aksi server dan klien, tangani pengiriman formulir, serta lacak status yang sedang berjalan.

React Actions & useActionState adalah pelajaran React Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar React Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus React Academy mencakup 4 pelajaran total.

Selamat Datang

Dalam pelajaran ini, Anda akan mendefinisikan React 19 Actions, menggunakan useActionState untuk mengelola status pengiriman formulir, serta menangani status menunggu dan error dengan rapi.

Apa Itu React Actions?

Action adalah fungsi asinkron yang Anda teruskan ke prop `action` pada formulir (atau `formAction` pada tombol). React 19 memperlakukannya secara khusus: melacak status menunggu, menangani error, dan otomatis terintegrasi dengan Transitions.

Aksi Server di Next.js

Di Next.js dengan App Router, tambahkan 'use server' di bagian atas fungsi untuk menjadikannya Server Action. React memanggilnya di server saat formulir dikirim—Anda tidak memerlukan rute API.
'use server';

export async function createPost(formData) {
  const title = formData.get('title');
  await db.insert(posts).values({ title });
  revalidatePath('/posts');
}

Menggunakan Action pada Formulir

Teruskan aksi server atau klien secara langsung ke prop `action` pada formulir. React memanggilnya dengan FormData saat formulir dikirim.
import { createPost } from './actions';

export default function NewPostForm() {
  return (
    <form action={createPost}>
      <input name="title" />
      <button type="submit">Create</button>
    </form>
  );
}

useActionState

useActionState membungkus sebuah action untuk memberi Anda state saat ini (hasil action terakhir) dan boolean isPending. Fungsi yang telah dibungkus tersebut diteruskan ke form action.
'use client';
import { useActionState } from 'react';
import { createPost } from './actions';

function NewPostForm() {
  const [state, action, isPending] = useActionState(createPost, null);
  return (
    <form action={action}>
      {state?.error && <p>{state.error}</p>}
      <input name="title" />
      <button disabled={isPending}>Create</button>
    </form>
  );
}

Action yang Mengembalikan State

Server action menerima `(prevState, formData)` saat digunakan bersama useActionState. Kembalikan objek yang berisi informasi keberhasilan atau error—objek ini menjadi state baru.
'use server';

export async function createPost(prevState, formData) {
  const title = formData.get('title')?.toString();
  if (!title) return { error: 'Title is required' };
  await db.insert(posts).values({ title });
  return { success: true };
}

isPending untuk Menonaktifkan Submit

Gunakan nilai isPending dari useActionState untuk menonaktifkan tombol submit dan menampilkan indikator pemuatan selama action berjalan.
<button type="submit" disabled={isPending}>
  {isPending ? 'Saving...' : 'Save'}
</button>

Aksi Klien

Action tidak harus berjalan di server. Client action adalah fungsi asinkron biasa tanpa 'use server'. Action tersebut tetap mendapatkan pengelolaan status menunggu dan state dari useActionState.
async function clientAction(prevState, formData) {
  const res = await fetch('/api/post', {
    method: 'POST', body: formData,
  });
  if (!res.ok) return { error: 'Failed' };
  return { success: true };
}

useFormStatus untuk Komponen Anak

Pada tombol submit yang berada jauh di dalam hierarki komponen, gunakan `useFormStatus()` untuk membaca status menunggu formulir induk tanpa meneruskan prop secara berantai.
'use client';
import { useFormStatus } from 'react-dom';

function SubmitButton() {
  const { pending } = useFormStatus();
  return <button disabled={pending}>Submit</button>;
}

Peningkatan Bertahap

React Actions bersama Server Actions tetap berfungsi tanpa JavaScript (peningkatan bertahap). Browser mengirimkan POST formulir native ke penangan Next.js, sehingga fitur tersebut sudah dapat digunakan sebelum JS dimuat.

Cek Singkat

Apa yang dikembalikan useActionState sehingga Anda dapat menampilkan status pemuatan saat action formulir berjalan?

Ringkasan

React Actions adalah fungsi asinkron yang diteruskan ke action formulir. useActionState membungkus sebuah action untuk memberi Anda state, fungsi action yang telah dibungkus, dan isPending. Server Actions menambahkan 'use server' dan berjalan di server.

Selanjutnya

Pelajaran berikutnya: **useOptimistic untuk Umpan Balik Instan** — Anda akan menampilkan pembaruan UI optimistis saat mutasi server sedang berlangsung.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “React Actions & useActionState” gratis?

Ya — teks lengkap “React Actions & useActionState” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus React Academy, upgrade ke CoddyKit PRO. Kursus React Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “React Actions & useActionState”?

Definisikan aksi server dan klien, tangani pengiriman formulir, serta lacak status yang sedang berjalan. Kamu berlatih React Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai React Academy?

Tidak diperlukan pengalaman sebelumnya. React Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “React Actions & useActionState” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran React Academy ini?

Ya. Setiap pelajaran React Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Penjelasan React Server Components
  2. Hook use() untuk Sumber Daya Asinkron
  3. React Actions & useActionState
  4. useOptimistic untuk Umpan Balik Seketika
← Kembali ke React Academy