React Academy · Pelajaran

Logik Tak Segerak dengan createAsyncThunk

Kendalikan panggilan API dalam Redux dengan createAsyncThunk serta kitar hayat pending/fulfilled/rejected.

Pelajaran 2 daripada 413 langkah

Logik Tak Segerak dengan createAsyncThunk ialah pelajaran React Academy percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran React Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus React Academy merangkumi sejumlah 4 pelajaran.

Selamat Datang

Dalam pelajaran ini, Anda akan mengendalikan panggilan API dalam Redux dengan createAsyncThunk serta mengendalikan tindakan kitar hayat yang menunggu, selesai dan ditolak dalam segmen Anda.

Apakah createAsyncThunk?

createAsyncThunk menjana pencipta tindakan tak segerak yang menghantar tiga tindakan kitar hayat secara automatik: menunggu (dimulakan), selesai (diselesaikan) dan ditolak (gagal). Anda mengendalikan setiap satunya dalam extraReducers.

Mentakrifkan Tindakan Tak Segerak

Panggil createAsyncThunk dengan rentetan jenis dan fungsi tak segerak pembina muatan. Kembalikan data yang Anda inginkan sebagai muatan tindakan selesai.
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
  }
);

Mengendalikan dalam extraReducers

Tambahkan kes untuk ketiga-tiga keadaan kitar hayat dalam extraReducers segmen tersebut. Uruskan pemuatan, data dan keadaan ralat dengan sewajarnya.
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;
    });
}

Menghantar Tindakan Tak Segerak

Hantar tindakan tak segerak from komponen dengan useDispatch. Hantar argumen secara terus kepada pencipta tindakan tak segerak.
const dispatch = useDispatch();
useEffect(() => {
  dispatch(fetchUser(userId));
}, [userId]);

Mengakses Keadaan dalam Tindakan Tak Segerak

Pembina muatan menerima objek thunkAPI sebagai argumen keduanya. Gunakan thunkAPI.getState() untuk membaca keadaan Redux semasa dan thunkAPI.dispatch() untuk menghantar tindakan 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());
  }
);

Mengendalikan Ralat dengan rejectWithValue

Untuk menghantar muatan ralat tersuai kepada kes ditolak, gunakan thunkAPI.rejectWithValue(). action.payload bagi tindakan ditolak akan mengandungi objek ralat tersuai 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 Tindakan Tak Segerak

Hantar isyarat AbortController kepada fetch Anda di dalam tindakan tak segerak. createAsyncThunk menyediakan isyarat melalui thunkAPI.signal secara automatik apabila tindakan itu dibatalkan dengan dispatch.abort().
async (id, { signal }) => {
  const res = await fetch('/api/' + id, { signal });
  return res.json();
}

Menunggu Tindakan Tak Segerak yang Dihantar

Pemanggilan dispatch() bagi tindakan tak segerak mengembalikan objek janji. Anda boleh menunggunya untuk mengetahui apabila kerja tak segerak selesai, yang berguna untuk corak penghalaan semula selepas penyimpanan.
const result = await dispatch(saveItem(data));
if (saveItem.fulfilled.match(result)) {
  navigate('/success');
}

Notasi Builder berbanding Notasi Objek

Gunakan corak panggilan balik builder.addCase dalam extraReducers — corak ini selamat dari segi jenis dan disokong. Notasi kunci objek yang lebih lama tidak digunakan lagi dalam versi RTK terkini.

Semakan Pantas

Apakah yang berlaku apabila fungsi tak segerak dalam createAsyncThunk melemparkan ralat?

Imbas Kembali

createAsyncThunk menjana tindakan pending/fulfilled/rejected secara automatik. Kendalikan ketiga-tiganya dalam extraReducers. Gunakan rejectWithValue untuk muatan ralat tersuai dan thunkAPI.getState() untuk mengakses keadaan semasa di dalam tindakan tak segerak.

Seterusnya

Pelajaran seterusnya: **RTK Query: Titik Akhir & Penyimpanan Sementara Automatik** — Anda akan mentakrifkan titik akhir API dengan createApi dan membiarkan RTK Query mengurus penyimpanan sementara secara automatik.
Percuma untuk bermula

Pelajari React dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
88
Pelajaran
324

Soalan Lazim

Adakah pelajaran “Logik Tak Segerak dengan createAsyncThunk” percuma?

Ya — teks penuh “Logik Tak Segerak dengan createAsyncThunk” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus React Academy, tingkat taraf kepada CoddyKit PRO. Kursus React Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Logik Tak Segerak dengan createAsyncThunk”?

Kendalikan panggilan API dalam Redux dengan createAsyncThunk serta kitar hayat pending/fulfilled/rejected. Anda berlatih React Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan React Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran React Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.

Berapa lamakah pelajaran “Logik Tak Segerak dengan createAsyncThunk” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran React Academy ini?

Ya. Setiap pelajaran React Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Hirisan Redux Toolkit & createSlice
  2. Logik Tak Segerak dengan createAsyncThunk
  3. RTK Query: Titik Akhir & Caching Automatik
  4. Kemas Kini Optimistik & Pembatalan Cache
← Kembali ke React Academy