Server Actions untuk Mutasi Data
Definisikan fungsi 'use server' untuk menangani mutasi formulir dan membatalkan validitas tembolok dengan revalidatePath.
Server Actions untuk Mutasi Data adalah pelajaran React Academy gratis di CoddyKit. Ini adalah pelajaran 4 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.
Apa Itu Aksi Server?
Aksi Server adalah fungsi asinkron yang diberi penanda 'use server' dan hanya berjalan di server. Fitur ini memungkinkan pengiriman formulir dan mutasi data tanpa menulis pengendali rute API.
Menentukan Aksi Server
Tambahkan 'use server' di bagian atas fungsi atau file untuk membuat Aksi Server. Aksi ini hanya dapat ditentukan dalam Komponen Server atau file actions.ts khusus.
// app/actions.ts
'use server';
import { revalidatePath } from 'next/cache';
import { redirect } from 'next/navigation';
export async function createPost(formData: FormData) {
const title = formData.get('title') as string;
await db.post.create({ data: { title } });
revalidatePath('/blog');
redirect('/blog');
}Menggunakan Aksi dalam Formulir
Berikan fungsi aksi ke properti action pada formulir. Tidak perlu onSubmit atau pengendali peristiwa—Next.js membuat serialisasi formulir dan memanggil aksi tersebut di sisi server.
import { createPost } from './actions';
export default function NewPostForm() {
return (
<form action={createPost}>
<input name="title" placeholder="Post title" required />
<button type="submit">Create</button>
</form>
);
}Hook useActionState
useActionState (React 19) membungkus sebuah aksi untuk melacak status tertunda dan menerima nilai kembalian aksi tersebut di dalam komponen.
'use client';
import { useActionState } from 'react';
import { createPost } from './actions';
const initialState = { error: null };
export function PostForm() {
const [state, action, isPending] = useActionState(createPost, initialState);
return (
<form action={action}>
{state.error && <p className="error">{state.error}</p>}
<input name="title" />
<button disabled={isPending}>{isPending ? 'Creating...' : 'Create'}</button>
</form>
);
}Mengembalikan Kesalahan Validasi
Kembalikan sebuah objek dari aksi, bukan melemparkan kesalahan, untuk meneruskan kesalahan validasi kembali ke formulir melalui useActionState.
export async function createPost(prevState: any, formData: FormData) {
'use server';
const title = formData.get('title') as string;
if (!title || title.length < 3) {
return { error: 'Title must be at least 3 characters' };
}
await db.post.create({ data: { title } });
revalidatePath('/blog');
redirect('/blog');
}Aksi Server dalam Pengendali Peristiwa
Panggil Aksi Server dari pengendali peristiwa Komponen Klien, bukan hanya dari aksi formulir, dengan mengimpor dan memanggilnya secara langsung.
'use client';
import { deletePost } from './actions';
export function DeleteButton({ id }: { id: string }) {
return (
<button onClick={() => deletePost(id)}>
Delete
</button>
);
}Aksi Server Sebaris
Tentukan Aksi Server secara sebaris dalam Komponen Server menggunakan fungsi yang berisi 'use server'—berguna untuk logika mutasi yang ditempatkan bersama komponennya.
export default function PostPage({ post }) {
async function updatePost(formData: FormData) {
'use server';
await db.post.update({ where: { id: post.id }, data: { title: formData.get('title') as string } });
revalidatePath(`/blog/${post.id}`);
}
return (
<form action={updatePost}>
<input name="title" defaultValue={post.title} />
<button type="submit">Save</button>
</form>
);
}useOptimistic dengan Aksi Server
Pasangkan useOptimistic dengan Aksi Server untuk memperbarui UI secara langsung saat aksi berjalan di latar belakang.
'use client';
import { useOptimistic } from 'react';
import { addItem } from './actions';
export function TodoList({ items }) {
const [optimisticItems, addOptimistic] = useOptimistic(items, (state, newItem) => [...state, newItem]);
return (
<form action={async (formData) => {
addOptimistic({ id: 'temp', text: formData.get('text') });
await addItem(formData);
}}>
<ul>{optimisticItems.map(i => <li key={i.id}>{i.text}</li>)}</ul>
<input name="text" /><button>Add</button>
</form>
);
}Pertimbangan Keamanan
Aksi Server pada dasarnya adalah titik akhir POST. Selalu validasi dan bersihkan masukan di sisi server, periksa autentikasi, dan gunakan perlindungan CSRF (Next.js menanganinya secara otomatis untuk asal yang sama).
Memvalidasi Ulang Setelah Mutasi
Panggil revalidatePath() atau revalidateTag() setelah mutasi untuk menghapus cache yang relevan agar pemuatan halaman berikutnya mencerminkan perubahan tersebut.
Pemeriksaan Singkat
Bagaimana cara memberikan Aksi Server ke formulir dalam Perute Aplikasi Next.js?
Ringkasan
Aksi Server adalah fungsi asinkron 'use server' yang menangani mutasi di sisi server. Hubungkan aksi tersebut ke formulir melalui properti action, lacak statusnya dengan useActionState, kembalikan kesalahan alih-alih melemparkannya untuk validasi, dan validasi ulang cache setelah mutasi.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Server Actions untuk Mutasi Data” gratis?
Ya — teks lengkap “Server Actions untuk Mutasi Data” 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 “Server Actions untuk Mutasi Data”?
Definisikan fungsi 'use server' untuk menangani mutasi formulir dan membatalkan validitas tembolok dengan revalidatePath. 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 4 dari 4.
Berapa lama pelajaran “Server Actions untuk Mutasi Data” 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
- fetch() dengan Opsi Tembolok di Next.js
- unstable_cache & React cache()
- Pembuatan Ulang Situs Statis Bertahap (ISR)
- Server Actions untuk Mutasi Data