Anda mungkin ingin / membutuhkan keduanya bersama-sama di aplikasi Anda. Mulailah dengan redux-promise untuk tugas asinkron rutin yang menghasilkan promise, lalu tingkatkan untuk menambahkan Thunks (atau Sagas, dll.) Saat kompleksitas meningkat :
- Jika hidup itu sederhana, dan Anda hanya melakukan pekerjaan asinkron dasar dengan pembuat yang memberikan satu janji, maka
redux-promise
akan meningkatkan hidup Anda dan menyederhanakannya, cepat dan mudah. (Singkatnya, alih-alih Anda perlu berpikir tentang 'membuka bungkusan' janji Anda ketika mereka menyelesaikannya, lalu menulis / mengirimkan hasilnya, redux-promise (-middleware) menangani semua hal yang membosankan itu untuk Anda.)
- Namun, hidup menjadi lebih kompleks ketika:
- Mungkin pembuat tindakan Anda ingin menghasilkan beberapa janji, yang ingin Anda kirimkan sebagai tindakan terpisah untuk memisahkan pereduksi?
- Atau, Anda memiliki beberapa pra-pemrosesan dan logika kondisional yang kompleks untuk dikelola, sebelum memutuskan bagaimana dan di mana akan mengirimkan hasilnya?
Dalam kasus tersebut, keuntungan dari redux-thunk
adalah memungkinkan Anda untuk merangkum kompleksitas di dalam pembuat tindakan Anda .
Tetapi perhatikan bahwa jika Thunk Anda menghasilkan dan mengirimkan promise, Anda akan ingin menggunakan kedua library tersebut secara bersamaan :
- Thunk akan menyusun tindakan asli dan mengirimkannya
redux-promise
kemudian akan menangani pembukaan bungkusan di peredam janji individu yang dihasilkan oleh Thunk Anda, untuk menghindari boilerplate yang diperlukan. (Anda malah bisa melakukan semuanya di Thunks, dengan promise.then(unwrapAndDispatchResult).catch(unwrapAndDispatchError)
... tapi mengapa Anda melakukannya?)
Cara sederhana lain untuk meringkas perbedaan dalam kasus penggunaan: awal vs. akhir siklus tindakan Redux :
- Thunks adalah untuk permulaan aliran Redux Anda: jika Anda perlu membuat tindakan yang kompleks, atau merangkum beberapa logika pembuatan tindakan yang rumit, menjauhkannya dari komponen Anda, dan pastinya dari pereduksi.
redux-promise
adalah untuk akhir aliran Anda, setelah semuanya telah diringkas menjadi janji sederhana, dan Anda hanya ingin membukanya dan menyimpan nilai terselesaikan / ditolak mereka di toko
CATATAN / REFS:
- Saya menemukan
redux-promise-middleware
implementasi yang lebih lengkap dan dapat dimengerti dari ide di balik aslinya redux-promise
. Ini sedang dalam pengembangan aktif, dan juga dilengkapi dengan baik oleh redux-promise-reducer
.
- ada perantara tambahan serupa yang tersedia untuk membuat / mengurutkan tindakan kompleks Anda: salah satu yang sangat populer adalah
redux-saga
, yang sangat mirip dengan redux-thunk
, tetapi didasarkan pada sintaks fungsi generator. Sekali lagi, Anda mungkin akan menggunakannya bersamaan dengan redux-promise
.
- Berikut adalah artikel bagus yang secara langsung membandingkan berbagai opsi komposisi asinkron, termasuk thunk dan redux-promise-middleware. (TL; DR: "Redux Promise Middleware mengurangi boilerplate cukup dramatis vs beberapa opsi lain" ... "Saya rasa saya suka Saga untuk aplikasi yang lebih kompleks (baca:" menggunakan "), dan Redux Promise Middleware untuk yang lainnya." )
- Perhatikan bahwa ada kasus penting di mana Anda mungkin berpikir Anda perlu mengirimkan beberapa tindakan, tetapi sebenarnya tidak, dan Anda dapat membuat hal-hal sederhana tetap sederhana. Di situlah Anda hanya ingin beberapa pereduksi bereaksi terhadap panggilan asinkron Anda. Namun, tidak ada alasan sama sekali mengapa beberapa reduksi tidak dapat memantau satu jenis tindakan. Anda hanya ingin memastikan bahwa tim Anda tahu Anda menggunakan konvensi itu, jadi mereka tidak menganggap hanya satu peredam (dengan nama terkait) yang dapat menangani tindakan tertentu.