0Pricing
React Academy · Pelajaran

Loader & Actions (API Router Data)

Ambil data rute sebelum render dengan loader dan tangani pengiriman formulir dengan action.

Loader & Actions (API Router Data) adalah pelajaran React Academy gratis di CoddyKit. Ini adalah pelajaran 2 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 Pemuat?

Dalam Data Router React Router v6.4+, pemuat adalah fungsi asinkron pada rute yang mengambil data sebelum rute dirender, menggantikan pola pengambilan data dengan useEffect.

Mendefinisikan Pemuat

Tambahkan properti loader ke objek rute. Properti ini menerima { params, request } dan mengembalikan data (atau Response).

import { createBrowserRouter } from 'react-router-dom';

async function userLoader({ params }) {
  const res = await fetch(`/api/users/${params.id}`);
  if (!res.ok) throw new Response('Not Found', { status: 404 });
  return res.json();
}

const router = createBrowserRouter([
  { path: '/users/:id', element: <UserDetail />, loader: userLoader },
]);

Membaca Data Pemuat dengan useLoaderData

useLoaderData() mengembalikan apa pun yang dikembalikan pemuat. Komponen hanya dirender setelah pemuat selesai.

import { useLoaderData } from 'react-router-dom';

function UserDetail() {
  const user = useLoaderData();
  return <h1>{user.name}</h1>;
}

Apa Itu Aksi?

Aksi adalah fungsi asinkron yang menangani mutasi data (pengiriman formulir, penghapusan). Fungsi ini berjalan sebelum rute dirender ulang setelah POST formulir.

async function createUserAction({ request }) {
  const formData = await request.formData();
  const name = formData.get('name');
  await fetch('/api/users', {
    method: 'POST',
    body: JSON.stringify({ name }),
    headers: { 'Content-Type': 'application/json' },
  });
  return redirect('/users');
}

Menggunakan Formulir untuk Memicu Aksi

Ganti <form> dengan <Form> milik React Router. Saat dikirim, formulir tersebut menserialisasi bidang sebagai FormData dan memanggil aksi rute.

import { Form } from 'react-router-dom';

function NewUser() {
  return (
    <Form method="post">
      <input name="name" />
      <button type="submit">Create</button>
    </Form>
  );
}

Mengembalikan Data dari Aksi

Aksi dapat mengembalikan data (bukan hanya pengalihan). Bacalah di dalam komponen dengan useActionData() — ini berguna untuk mengembalikan kesalahan validasi.

async function loginAction({ request }) {
  const data = await request.formData();
  const errors = validate(data);
  if (errors) return errors; // returned to useActionData
  await login(data);
  return redirect('/dashboard');
}

function Login() {
  const errors = useActionData();
  return (
    <Form method="post">
      {errors?.email && <p>{errors.email}</p>}
      <input name="email" />
    </Form>
  );
}

Status Pemuatan dengan useNavigation

useNavigation() memberi tahu Anda saat pemuat atau aksi sedang berjalan, sehingga Anda dapat menampilkan indikator pemuatan atau menonaktifkan tombol kirim.

function SubmitButton() {
  const navigation = useNavigation();
  const isSubmitting = navigation.state === 'submitting';
  return (
    <button type="submit" disabled={isSubmitting}>
      {isSubmitting ? 'Saving...' : 'Save'}
    </button>
  );
}

Data Tertunda dengan defer()

Gunakan defer() untuk mengembalikan promise data yang lambat dari pemuat tanpa menghambat rendering, lalu uraikan promise tersebut dengan <Await> dan Suspense.

import { defer, Await } from 'react-router-dom';

async function slowLoader() {
  return defer({ fast: await getFast(), slow: getSlow() });
}

function Page() {
  const { fast, slow } = useLoaderData();
  return (
    <>
      <h1>{fast.title}</h1>
      <Suspense fallback={<p>Loading...</p>}>
        <Await resolve={slow}>{data => <Chart data={data} />}</Await>
      </Suspense>
    </>
  );
}

Validasi Ulang Setelah Aksi

Setelah aksi selesai, React Router secara otomatis menjalankan kembali semua pemuat aktif untuk menyegarkan data — tidak diperlukan pengambilan ulang secara manual.

Penanganan Kesalahan dalam Pemuat

Lemparkan Response atau kesalahan apa pun dari pemuat; React Router akan menangkapnya dan merender errorElement milik rute, yang dapat diakses melalui useRouteError().

function ErrorPage() {
  const error = useRouteError();
  return (
    <div>
      <h1>{error.status} {error.statusText}</h1>
    </div>
  );
}

Fetcher untuk Mutasi Tanpa Navigasi

useFetcher() memungkinkan Anda memanggil pemuat atau aksi tanpa melakukan navigasi. Ini berguna untuk formulir sebaris, seperti menyukai postingan tanpa meninggalkan halaman.

function LikeButton({ postId }) {
  const fetcher = useFetcher();
  return (
    <fetcher.Form method="post" action={`/posts/${postId}/like`}>
      <button type="submit">Like</button>
    </fetcher.Form>
  );
}

Pemeriksaan Cepat

Hook apa yang membaca data yang dikembalikan oleh fungsi pemuat suatu rute?

Ringkasan

API Data React Router menggunakan pemuat untuk mengambil data sebelum rendering dan aksi untuk menangani mutasi. Komponen membaca data pemuat melalui useLoaderData(), hasil aksi melalui useActionData(), dan status navigasi melalui useNavigation().

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Loader & Actions (API Router Data)” gratis?

Ya — teks lengkap “Loader & Actions (API Router 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 “Loader & Actions (API Router Data)”?

Ambil data rute sebelum render dengan loader dan tangani pengiriman formulir dengan action. 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 2 dari 4.

Berapa lama pelajaran “Loader & Actions (API Router 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

  1. Rute Bertingkat & Tata Letak Outlet
  2. Loader & Actions (API Router Data)
  3. Rute Terlindungi & Penjaga Autentikasi
  4. Mengelola Status dalam Parameter Pencarian URL
← Kembali ke React Academy