React Academy · Pelajaran

Logika Asinkron dengan createAsyncThunk

Tangani pemanggilan API di Redux dengan createAsyncThunk dan siklus hidup pending/fulfilled/rejected.

Pelajaran 2 dari 413 langkah

Logika Asinkron dengan createAsyncThunk 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.

Selamat Datang

Dalam pelajaran ini, Anda akan menangani panggilan API di Redux dengan createAsyncThunk serta menangani aksi siklus hidup pending, fulfilled, dan rejected di dalam slice Anda.

Apa Itu createAsyncThunk?

createAsyncThunk membuat pembuat aksi thunk yang secara otomatis mengirimkan tiga aksi siklus hidup: pending (dimulai), fulfilled (berhasil), dan rejected (gagal). Tangani masing-masing aksi tersebut di extraReducers.

Mendefinisikan Thunk

Panggil createAsyncThunk dengan string tipe dan fungsi pembuat payload asinkron. Kembalikan data yang ingin Anda jadikan payload fulfilled.
import { createAsyncThunk } from '@reduxjs/toolkit';

export const fetchUser = createAsyncThunk(
  'users/fetchById',
  async (userId) => {
    const response = await fetch('/api/users/' + userId);
    return response.json(); // becomes action.payload on fulfilled
  }
);

Menangani di extraReducers

Tambahkan kasus untuk ketiga status siklus hidup di extraReducers milik slice. Kelola status pemuatan, data, dan kesalahan dengan tepat.
extraReducers: (builder) => {
  builder
    .addCase(fetchUser.pending, state => {
      state.loading = true;
      state.error = null;
    })
    .addCase(fetchUser.fulfilled, (state, action) => {
      state.loading = false;
      state.user = action.payload;
    })
    .addCase(fetchUser.rejected, (state, action) => {
      state.loading = false;
      state.error = action.error.message;
    });
}

Mengirimkan Thunk

Kirimkan thunk dari sebuah komponen dengan useDispatch. Teruskan argumen secara langsung ke pembuat aksi thunk.
const dispatch = useDispatch();
useEffect(() => {
  dispatch(fetchUser(userId));
}, [userId]);

Mengakses State di Dalam Thunk

Pembuat payload menerima objek thunkAPI sebagai argumen keduanya. Gunakan thunkAPI.getState() untuk membaca state Redux saat ini dan thunkAPI.dispatch() untuk mengirimkan aksi lain.
export const saveItem = createAsyncThunk(
  'items/save',
  async (item, { getState }) => {
    const { auth } = getState();
    return fetch('/api/items', {
      method: 'POST',
      headers: { Authorization: 'Bearer ' + auth.token },
      body: JSON.stringify(item),
    }).then(r => r.json());
  }
);

Menangani Kesalahan dengan rejectWithValue

Untuk meneruskan payload kesalahan khusus ke kasus rejected, gunakan thunkAPI.rejectWithValue(). action.payload dari aksi rejected akan berisi objek kesalahan khusus Anda.
export const fetchData = createAsyncThunk(
  'data/fetch',
  async (id, { rejectWithValue }) => {
    const res = await fetch('/api/' + id);
    if (!res.ok) return rejectWithValue({ status: res.status });
    return res.json();
  }
);
// In rejected case: action.payload.status is available

Membatalkan Thunk

Teruskan sinyal AbortController ke fetch di dalam thunk Anda. createAsyncThunk secara otomatis menyediakan sinyal tersebut melalui thunkAPI.signal ketika thunk dibatalkan dengan dispatch.abort().
async (id, { signal }) => {
  const res = await fetch('/api/' + id, { signal });
  return res.json();
}

Menunggu Thunk yang Dikirimkan

dispatch() untuk sebuah thunk mengembalikan Promise. Anda dapat menunggunya untuk mengetahui kapan pekerjaan asinkron selesai, misalnya dalam pola pengalihan setelah penyimpanan.
const result = await dispatch(saveItem(data));
if (saveItem.fulfilled.match(result)) {
  navigate('/success');
}

Notasi Builder vs Notasi Objek

Gunakan pola callback builder.addCase di extraReducers — pola ini aman terhadap kesalahan tipe dan didukung. Notasi lama yang menggunakan kunci objek sudah tidak digunakan lagi dalam versi RTK terbaru.

Pemeriksaan Singkat

Apa yang terjadi ketika fungsi asinkron di dalam createAsyncThunk melemparkan kesalahan?

Rangkuman

createAsyncThunk secara otomatis membuat aksi pending/fulfilled/rejected. Tangani ketiganya di extraReducers. Gunakan rejectWithValue untuk payload kesalahan khusus dan thunkAPI.getState() untuk mengakses state saat ini di dalam thunk.

Selanjutnya

Pelajaran berikutnya: **RTK Query: Endpoint & Penyimpanan Cache Otomatis** — Anda akan mendefinisikan endpoint API dengan createApi dan membiarkan RTK Query mengelola cache secara otomatis.
Gratis untuk memulai

Belajar React dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
88
Pelajaran
324

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Logika Asinkron dengan createAsyncThunk” gratis?

Ya — teks lengkap “Logika Asinkron dengan createAsyncThunk” 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 “Logika Asinkron dengan createAsyncThunk”?

Tangani pemanggilan API di Redux dengan createAsyncThunk dan siklus hidup pending/fulfilled/rejected. 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 “Logika Asinkron dengan createAsyncThunk” 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. Slice Redux Toolkit & createSlice
  2. Logika Asinkron dengan createAsyncThunk
  3. RTK Query: Endpoint & Penyimpanan Tembolok Otomatis
  4. Pembaruan Optimistis & Pembatalan Validitas Tembolok
← Kembali ke React Academy