Penafian: Saya adalah salah satu penulis redux-observable sehingga sulit bagi saya untuk 100% tidak memihak.
Kami saat ini tidak memberikan alasan redux-observable lebih baik daripada redux-saga karena ... tidak. 😆
tl; dr ada pro dan kontra untuk keduanya. Banyak yang akan menemukan satu lebih intuitif daripada yang lain, tetapi keduanya kompleks untuk dipelajari dengan cara yang berbeda jika Anda tidak tahu RxJS (redux-observable) atau generator / "efek sebagai data" (redux-saga).
Mereka memecahkan masalah yang sama dengan cara yang sangat mirip, tetapi memiliki beberapa perbedaan mendasar yang hanya menjadi nyata setelah Anda menggunakannya dengan cukup.
redux-observable hampir mengubah segalanya menjadi RxJS idiomatik. Jadi jika Anda memiliki pengetahuan RxJS (atau memperolehnya), belajar dan menggunakan redux-observable adalah super alami. Itu juga berarti bahwa pengetahuan ini dapat ditransfer ke hal lain selain redux. Jika Anda memutuskan untuk beralih ke MobX, jika Anda memutuskan untuk beralih ke Angular2, jika Anda memutuskan untuk beralih ke beberapa hotness X di masa mendatang, kemungkinan sangat bagus bahwa RxJS dapat membantu Anda. Ini karena RxJS adalah pustaka async umum, dan dalam banyak hal seperti bahasa pemrograman itu sendiri — seluruh paradigma "Pemrograman Reaktif". RxJS ada sejak 2012 dan dimulai sebagai port Rx.NET (ada "port" di hampir setiap bahasa utama, itu berguna ).
redux-saga menyediakan operator berbasis waktu itu sendiri, jadi sementara pengetahuan yang Anda peroleh tentang generator dan penanganan efek samping dalam gaya proses-manajer ini dapat ditransfer, operator dan penggunaan yang sebenarnya tidak digunakan di perpustakaan utama lainnya. Jadi itu sedikit disayangkan, tetapi tentu saja tidak seharusnya menjadi pemecah kesepakatan dengan sendirinya.
Itu juga menggunakan "efek sebagai data" ( dijelaskan di sini ), yang mungkin sulit untuk membungkus kepala Anda pada awalnya, tetapi itu berarti bahwa kode redux-saga Anda tidak benar-benar melakukan efek samping itu sendiri. Sebagai gantinya, fungsi helper yang Anda gunakan membuat objek yang seperti tugas yang mewakili maksud untuk melakukan efek samping dan kemudian pustaka internal melakukan itu untuk Anda. Ini membuat pengujian sangat mudah, tanpa perlu mengejek dan sangat menarik bagi sebagian orang. Namun, saya pribadi telah menemukan bahwa ini berarti unit test Anda menerapkan kembali banyak logika saga Anda - membuat tes tersebut tidak terlalu berguna untuk IMO (pendapat ini tidak dibagikan oleh semua orang)
Orang sering bertanya mengapa kita tidak melakukan sesuatu seperti itu dengan redux-observable: bagi saya itu pada dasarnya tidak sesuai dengan Rx idiomatik normal. Dalam Rx, kami menggunakan operator seperti .debounceTime()
itu merangkum logika yang diperlukan untuk mendebounce, tetapi itu berarti jika kami ingin membuat versi itu yang tidak benar-benar melakukan debouncing dan sebagai gantinya memancarkan objek tugas dengan maksud, Anda sekarang telah kehilangan kekuatan Rx karena Anda tidak bisa hanya rantai operator lagi karena mereka akan beroperasi pada objek tugas itu, bukan hasil nyata dari operasi. Ini sangat sulit dijelaskan dengan elegan. Lagi-lagi membutuhkan pemahaman Rx untuk memahami ketidakcocokan pendekatan. Jika Anda benar - benar menginginkan sesuatu seperti itu, lihat siklus reduxyang menggunakan cycle.js dan sebagian besar memiliki tujuan tersebut. Saya menemukan itu membutuhkan upacara terlalu banyak untuk seleraku, tetapi saya mendorong Anda untuk mencobanya jika itu menarik minat Anda.
Seperti yang disebutkan ThorbenA, saya tidak menghindar untuk mengakui bahwa redux-saga saat ini (13/10/16) adalah pemimpin yang jelas dalam manajemen efek samping kompleks untuk redux. Itu dimulai lebih awal dan memiliki komunitas yang lebih kuat. Jadi ada banyak daya tarik untuk menggunakan standar de facto atas anak baru di blok. Saya pikir aman untuk mengatakan jika Anda menggunakan baik tanpa sepengetahuan sebelumnya, Anda berada dalam kebingungan. Kami berdua menggunakan konsep yang cukup canggih yang sekali Anda "dapatkan", membuat manajemen efek samping yang kompleks jauh lebih mudah, tetapi sampai saat itu banyak yang tersandung.
Saran paling penting yang bisa saya berikan adalah tidak membawa salah satu perpustakaan ini sebelum Anda membutuhkannya. Jika Anda hanya membuat panggilan ajax sederhana, Anda mungkin tidak membutuhkannya. redux-thunk adalah bodoh sederhana untuk dipelajari dan menyediakan cukup untuk dasar-dasar - tetapi semakin kompleks async semakin sulit (atau bahkan tidak mungkin) menjadi redux-thunk. Tetapi untuk redux-observable / saga dalam banyak hal ia bersinar paling kompleks dari async. Ada juga banyak manfaat dalam menggunakan redux-thunk dengan yang lain (redux-observable / saga) dalam proyek yang sama! redux-thunk untuk hal-hal sederhana umum Anda dan kemudian hanya menggunakan redux-observable / saga untuk hal-hal kompleks. Itu cara yang bagus untuk tetap produktif, jadi Anda tidak berjuang redux-observable / saga untuk hal-hal yang sepele dengan redux-thunk.