Rumah > hujung hadapan web > tutorial js > Mengapa Menggunakan Middleware untuk Tindakan Asynchronous dalam Redux?

Mengapa Menggunakan Middleware untuk Tindakan Asynchronous dalam Redux?

Mary-Kate Olsen
Lepaskan: 2024-12-27 20:27:10
asal
188 orang telah melayarinya

Why Use Middleware for Asynchronous Actions in Redux?

Mengapakah kita memerlukan perisian tengah untuk aliran tak segerak dalam Redux?

Pada mulanya mungkin kelihatan Redux tidak menyokong aliran data tak segerak kerana ia menentukan bahawa "Stor Redux hanya menyokong aliran data segerak." Walau bagaimanapun, ini tidak berlaku.

Dalam contoh yang diberikan, komponen kontena pastinya boleh menggunakan API tak segerak dan seterusnya menghantar tindakan yang perlu. Malah, pendekatan ini berfungsi dengan betul, seperti yang ditunjukkan oleh pengemaskinian medan apabila butang diklik.

Apa masalahnya dengan strategi ini?

The kebimbangan utama timbul dalam konteks aplikasi yang lebih besar di mana banyak komponen boleh melakukan tindakan yang sama atau di mana ia mungkin wajar untuk menggabungkan ciri seperti nyahlantun. Selain itu, mungkin berfaedah untuk mengekalkan pencipta tindakan berhampiran keadaan setempat untuk tugas seperti ID peningkatan automatik.

Dari perspektif penyelenggaraan, ia memudahkan urusan untuk memisahkan pencipta tindakan kepada fungsi yang berbeza, memudahkan pembangunan dan penyelenggaraan pangkalan kod.

Manakala perisian tengah seperti Redux Thunk atau Redux Promise menyediakan pemudahan kod melalui gula sintaksis, ia tidak begitu diperlukan untuk tujuan mengendalikan tindakan tak segerak.

Tanpa Middleware:

Jika tiada middleware, pencipta tindakan boleh melakukan operasi async secara langsung , seperti yang digambarkan di bawah:

function loadData(dispatch, userId) {
  fetch(`http://data.com/${userId}`)
    .then(res => res.json())
    .then(
      data => dispatch({ type: 'LOAD_DATA_SUCCESS', data }),
      err => dispatch({ type: 'LOAD_DATA_FAILURE', err })
    );
}

// in component
componentWillMount() {
  loadData(this.props.dispatch, this.props.userId); // pass dispatch as argument for async action creator
}
Salin selepas log masuk

Dengan Thunk Middleware:

Redux Thunk menawarkan sintaks yang lebih ringkas untuk menghantar tindakan tak segerak:

function loadData(userId) {
  return dispatch =>
    fetch(`http://data.com/${userId}`)
      .then(res => res.json())
      .then(
        data => dispatch({ type: 'LOAD_DATA_SUCCESS', data }),
        err => dispatch({ type: 'LOAD_DATA_FAILURE', err })
      );
}

// in component
componentWillMount() {
  this.props.dispatch(loadData(this.props.userId)); // dispatch as usual
}
Salin selepas log masuk

Faedah Middleware:

Yang utama kelebihan menggunakan perisian tengah seperti Redux Thunk terletak pada penyahgandingan komponen daripada tindakan butiran pelaksanaan pencipta. Komponen tetap tidak menyedari sama ada pencipta tindakan adalah segerak atau tak segerak dan sama ada ia berinteraksi dengan keadaan Redux atau pencipta tindakan lain.

Alternatif kepada Middleware:

Redux Thunk ialah bukan satu-satunya pendekatan untuk mengendalikan permintaan tak segerak dalam aplikasi Redux. Alternatif lain yang menarik ialah Redux Saga, yang membolehkan takrifan "sagas" jangka panjang yang beroperasi pada tindakan masuk, mengubah atau melaksanakan permintaan sebelum menghasilkan tindakan selanjutnya.

Atas ialah kandungan terperinci Mengapa Menggunakan Middleware untuk Tindakan Asynchronous dalam Redux?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan