Penulis redux di sini!
Redux tidak yang berbeda dari Flux. Secara keseluruhan ia memiliki arsitektur yang sama, tetapi Redux mampu memotong beberapa sudut kompleksitas dengan menggunakan komposisi fungsional di mana Flux menggunakan pendaftaran callback.
Tidak ada perbedaan mendasar dalam Redux, tetapi saya merasa hal itu membuat abstraksi tertentu lebih mudah, atau setidaknya mungkin untuk diterapkan, yang akan sulit atau tidak mungkin untuk diterapkan di Flux.
Komposisi Peredam
Ambil, misalnya, pagination. Saya Flux + Bereaksi Router contoh menangani pagination, tapi kode untuk itu mengerikan. Salah satu alasannya mengerikan adalah Flux membuatnya tidak wajar untuk menggunakan kembali fungsionalitas di seluruh toko. Jika dua toko perlu menangani pagination dalam menanggapi tindakan yang berbeda, mereka juga perlu mewarisi dari toko basis umum (buruk! Anda mengunci diri Anda ke dalam desain tertentu ketika Anda menggunakan warisan), atau memanggil fungsi yang ditentukan secara eksternal dari dalam pengendali acara, yang perlu entah bagaimana beroperasi di negara pribadi Flux store. Semuanya berantakan (meskipun pasti di bidang yang mungkin).
Di sisi lain, pagination Redux adalah alami berkat komposisi peredam. Ini reduksi sepanjang jalan, sehingga Anda dapat menulis pabrik peredam yang menghasilkan peredam pagination dan kemudian menggunakannya di pohon peredam Anda . Kunci mengapa begitu mudah adalah karena di Flux, toko datar, tetapi di Redux, reduksi dapat bersarang melalui komposisi fungsional, sama seperti komponen Bereaksi dapat bersarang.
Pola ini juga memungkinkan fitur-fitur luar biasa seperti no-user-code undo / redo . Bisakah Anda bayangkan memasukkan Undo / Redo ke aplikasi Flux menjadi dua baris kode? Hampir tidak. Dengan Redux, itu — lagi- lagi, berkat pola komposisi peredam. Saya perlu menggarisbawahi bahwa tidak ada yang baru tentang hal ini — ini adalah pola yang dipelopori dan dijelaskan secara rinci dalam Arsitektur Elm yang sendiri dipengaruhi oleh Flux.
Rendering Server
Orang-orang telah melakukan rendering pada server dengan Flux, tetapi melihat bahwa kami memiliki 20 pustaka Flux yang masing-masing berusaha membuat rendering server “lebih mudah”, mungkin Flux memiliki beberapa sisi yang kasar pada server. Yang benar adalah Facebook tidak melakukan banyak rendering server, jadi mereka tidak terlalu khawatir tentang hal itu, dan mengandalkan ekosistem untuk membuatnya lebih mudah.
Dalam Flux tradisional, toko adalah lajang. Ini berarti sulit untuk memisahkan data untuk permintaan yang berbeda di server. Bukan tidak mungkin, tetapi sulit. Inilah sebabnya mengapa sebagian besar pustaka Flux (dan juga Flux Utils baru ) sekarang menyarankan Anda menggunakan kelas alih-alih lajang, sehingga Anda dapat membuat instantiate toko per permintaan.
Masih ada masalah berikut yang perlu Anda selesaikan di Flux (baik Anda sendiri atau dengan bantuan pustaka Flux favorit Anda seperti Flummox atau Alt ):
- Jika toko adalah kelas, bagaimana cara membuat dan menghancurkannya dengan operator berdasarkan permintaan? Kapan saya mendaftar toko?
- Bagaimana cara menghidrasi data dari toko dan kemudian mengembalikannya pada klien? Apakah saya perlu menerapkan metode khusus untuk ini?
Diakui kerangka kerja Flux (bukan vanilla Flux) memiliki solusi untuk masalah ini, tapi saya merasa mereka terlalu rumit. Sebagai contoh, Flummox meminta Anda untuk mengimplementasikan serialize()
dan deserialize()
di toko Anda . Alt memecahkan ini lebih baik dengan menyediakan takeSnapshot()
yang secara otomatis membuat serial keadaan Anda di pohon JSON.
Redux melangkah lebih jauh: karena hanya ada satu toko (dikelola oleh banyak reduksi), Anda tidak memerlukan API khusus untuk mengelola hidrasi (kembali). Anda tidak perlu "menyiram" atau "menghidrasi" toko — hanya ada satu toko, dan Anda dapat membaca keadaan saat ini, atau membuat toko baru dengan keadaan baru. Setiap permintaan mendapat contoh toko terpisah. Baca lebih lanjut tentang rendering server dengan Redux.
Sekali lagi, ini adalah kasus dari sesuatu yang mungkin baik di Flux dan Redux, tetapi perpustakaan Flux menyelesaikan masalah ini dengan memperkenalkan satu ton API dan konvensi, dan Redux bahkan tidak harus menyelesaikannya karena tidak memiliki masalah di Tempat pertama berkat kesederhanaan konseptual.
Pengalaman Pengembang
Saya sebenarnya tidak bermaksud Redux untuk menjadi perpustakaan Flux yang populer — saya menulisnya ketika saya sedang mengerjakan pembicaraan ReactEurope saya tentang pemuatan ulang panas dengan perjalanan waktu . Saya memiliki satu tujuan utama: memungkinkan untuk mengubah kode peredam dengan cepat atau bahkan "mengubah masa lalu" dengan mencoret tindakan, dan melihat negara tersebut dihitung ulang.
Saya belum melihat perpustakaan Flux tunggal yang dapat melakukan ini. Bereaksi Hot Loader juga tidak membiarkan Anda melakukan ini — sebenarnya rusak jika Anda mengedit toko Flux karena tidak tahu apa yang harus dilakukan dengan mereka.
Ketika Redux perlu memuat ulang kode peredam, itu memanggil replaceReducer()
, dan aplikasi berjalan dengan kode baru. Di Flux, data dan fungsi terjerat di Flux store, jadi Anda tidak bisa "hanya mengganti fungsi". Selain itu, Anda harus mendaftarkan ulang entah bagaimana versi baru ke Dispatcher — sesuatu yang bahkan Redux tidak miliki.
Ekosistem
Redux memiliki ekosistem yang kaya dan tumbuh cepat . Ini karena ia menyediakan beberapa titik ekstensi seperti middleware . Itu dirancang dengan menggunakan kasus-kasus seperti penebangan , dukungan untuk Janji , Observable , perutean , pemeriksaan dev abadi , ketekunan , dll, dalam pikiran. Tidak semua ini ternyata bermanfaat, tetapi senang memiliki akses ke seperangkat alat yang dapat dengan mudah digabungkan untuk bekerja bersama.
Kesederhanaan
Redux mempertahankan semua manfaat Flux (merekam dan memutar ulang tindakan, aliran data searah, mutasi dependen) dan menambahkan manfaat baru (mudah dibatalkan, reload panas) tanpa memperkenalkan Dispatcher dan registrasi toko.
Menjaga agar tetap sederhana itu penting karena itu membuat Anda tetap waras saat Anda menerapkan abstraksi tingkat yang lebih tinggi.
Tidak seperti kebanyakan pustaka Flux, permukaan Redux API kecil. Jika Anda menghapus peringatan pengembang, komentar, dan cek kewarasan, itu 99 baris . Tidak ada kode async yang rumit untuk debug.
Anda benar-benar dapat membacanya dan memahami semua Redux.
Lihat juga jawaban saya tentang kerugian menggunakan Redux dibandingkan dengan Flux .