Bereaksi Konteks vs Bereaksi Redux, kapan saya harus menggunakan masing-masing? [Tutup]

187

Bereaksi 16.3.0 dirilis dan API Konteks bukan fitur eksperimental lagi. Dan Abramov (pencipta Redux) menulis komentar yang baik di sini tentang ini, tetapi itu adalah 2 tahun ketika Konteks masih merupakan fitur Eksperimental.

Pertanyaan saya adalah, menurut pendapat / pengalaman Anda kapan saya harus menggunakan Bereaksi Konteks atas Bereaksi Redux dan sebaliknya?

Alfrex92
sumber
Jika Anda membandingkan Redux dan React Context API, itu karena Anda hanya ingin menjaga vars pada sinkronisasi antar komponen. Periksa duixpaket npm. Itu hanya manajer negara sederhana dengan panggilan balik, sangat mudah diimplementasikan. Untuk lebih jelasnya: Akulah penciptanya.
Broda Noel

Jawaban:

208

Karena Konteks bukan lagi fitur eksperimental dan Anda dapat menggunakan Konteks dalam aplikasi Anda secara langsung dan akan bagus untuk meneruskan data ke komponen yang sangat bersarang untuk apa ia dirancang.

Seperti yang ditulis Mark erikson di blognya :

Jika Anda hanya menggunakan Redux untuk menghindari penurunan props, konteks bisa menggantikan Redux - tetapi Anda mungkin tidak membutuhkan Redux di tempat pertama.

Konteks juga tidak memberi Anda sesuatu seperti itu Redux DevTools, kemampuan untuk melacak pembaruan keadaan Anda, middlewareuntuk menambahkan logika aplikasi terpusat, dan kemampuan kuat lainnya yang Redux memungkinkan.

Reduxjauh lebih kuat dan menyediakan sejumlah besar fitur yang Context Apitidak disediakan, juga seperti yang disebutkan As @danAbramov

Bereaksi Redux menggunakan konteks secara internal tetapi tidak mengekspos fakta ini di API publik. Jadi Anda harus merasa jauh lebih aman menggunakan konteks melalui React Redux daripada secara langsung karena jika itu berubah, beban memperbarui kode akan berada di React Redux dan bukan Anda.

Hingga Redux benar-benar memperbarui implementasinya untuk mematuhi API konteks terbaru

API Konteks terbaru dapat digunakan untuk Aplikasi di mana Anda hanya akan menggunakan Redux untuk mengirimkan data antar komponen, namun aplikasi yang menggunakan data terpusat dan menangani permintaan API dalam pembuat Tindakan menggunakan redux-thunkatau redux-sagamasih akan membutuhkan redux. Selain redux ini memiliki pustaka lain yang terkait seperti redux-persistyang memungkinkan Anda untuk menyimpan data di localStorage dan rehydrate saat refresh yang merupakan konteks yang masih tidak didukung API.

Seperti @dan_abramov sebutkan di blog-nya Anda mungkin tidak perlu Redux , redux itu memiliki aplikasi yang bermanfaat

  • Tetap bertahan ke penyimpanan lokal dan kemudian boot dari sana, di luar kotak.
  • Status pra-isi pada server, kirim ke klien dalam HTML, dan boot dari sana, di luar kotak.
  • Serialkan tindakan pengguna dan lampirkan, bersama dengan snapshot keadaan, ke laporan bug otomatis, sehingga pengembang produk
    dapat memutar ulang untuk mereproduksi kesalahan.
  • Lewati objek aksi melalui jaringan untuk mengimplementasikan lingkungan kolaboratif tanpa perubahan dramatis pada bagaimana kode ditulis.
  • Pertahankan riwayat batalkan atau terapkan mutasi optimis tanpa perubahan dramatis pada bagaimana kode ditulis.
  • Bepergian di antara riwayat status dalam pengembangan, dan evaluasi kembali keadaan saat ini dari riwayat tindakan saat kode berubah, ala TDD.
  • Memberikan kemampuan inspeksi dan kontrol penuh ke perangkat pengembangan sehingga pengembang produk dapat membuat alat khusus untuk
    aplikasi mereka .
  • Berikan UI alternatif sambil menggunakan kembali sebagian besar logika bisnis.

Dengan banyak aplikasi ini terlalu cepat untuk mengatakan bahwa Redux akan digantikan oleh API Konteks baru

Shubham Khatri
sumber
Ok, tapi bagaimana dengan usabilitas? Konteksnya sepenuhnya dapat digunakan kembali, sekali redux + thunk, dan terutama redux + saga nyaris tidak ada.
Yurii Haiovyi
4
@ Taggett Satu hal yang perlu kita pahami adalah redux bukan konteks, itu dibangun di atas konteks, toko yang Anda miliki diturunkan oleh konteks, juga dapatkah Anda menguraikan apa yang Anda maksud dengan usabilitas
Shubham Khatri
Bahkan pengembangan hal dasar seperti wadah yang dapat digunakan kembali dengan efek samping menjadi mimpi buruk dengan redux. Redux ketat untuk tingkat aplikasi, dan Anda dapat mengatakan, itu masih dapat digunakan kembali dll., Tetapi mengatakan dapat digunakan kembali maksud saya benar-benar dapat digunakan kembali ... Dengan tidak ada spaghetti dari paku, dibangun sebagai paket terpisah, dan dapat digunakan kembali secara mandiri untuk pengaturan aplikasi .
Yurii Haiovyi
@ YuriiHaiovyi Saya setuju dengan pertanyaan Anda. Jawaban ini pada dasarnya adalah versi terkompilasi dari apa yang dikatakan posting blog tertaut. Tidak ada tentang berbagi perspektif sendiri, seperti saya hanya menggunakan konteks, dan kemudian saya terjebak, dan merasa itu adalah pilihan yang buruk untuk beberapa alasan x, y, z dan kemudian pindah ke Redux, Mobx yang menyelesaikannya .. atau sebaliknya cerita misalnya. Terutama orang bertanya atau mencari ini untuk melihat apakah ada beberapa cerita buruk atau bagus yang kemudian dapat membantu pembaca untuk berpikir dan membuat keputusan yang diperhitungkan ... Jadi pertanyaan saya jalan apa yang Anda pilih?
Arup Rakshit
4
Bagian redux mana yang tidak dapat digunakan kembali? Anda dapat dengan mudah menggunakan kembali reduksi, penyeleksi, aksi, dan pembuat tindakan dalam aplikasi lain dengan redux (bereaksi, bahkan sudut).
Dávid Molnár
85

Jika Anda menggunakan Redux hanya untuk menghindari melewati alat peraga ke komponen yang sangat bersarang , maka Anda dapat mengganti Redux dengan ContextAPI. Ini persis ditujukan untuk use case ini.

Di sisi lain, jika Anda menggunakan Redux untuk segala hal lain (memiliki wadah keadaan yang dapat diprediksi, menangani logika aplikasi Anda di luar komponen Anda, memusatkan keadaan aplikasi Anda, menggunakan Redux DevTools untuk melacak kapan, di mana, mengapa, dan bagaimana status aplikasi Anda diubah, atau menggunakan plugin seperti Redux Form , Redux Saga , Redux Undo , Redux Persist , Redux Logger , dll ...), maka sama sekali tidak ada alasan bagi Anda untuk meninggalkan Redux. The ContextAPI tidak menyediakan semua ini.

Dan saya pribadi percaya bahwa ekstensi Redux DevTools adalah alat debugging yang luar biasa, diremehkan, yang dibenarkan dengan sendirinya untuk terus menggunakan Redux.

Beberapa referensi:

GG.
sumber
12

Saya lebih suka menggunakan redux dengan redux-thunk untuk melakukan panggilan API (juga menggunakan Axios) dan mengirimkan respons terhadap reduksi. Itu bersih dan mudah dimengerti.

API Konteks sangat spesifik untuk bagian react-redux tentang bagaimana komponen Bereaksi terhubung ke toko. Untuk ini, reaksi-redux baik. Tetapi jika Anda mau, karena Konteks secara resmi didukung, Anda bisa menggunakan API Konteks daripada bereaksi-redux.

Jadi, pertanyaannya adalah Context API vs react-redux, dan bukan Context API vs redux. Juga, pertanyaannya sedikit dikemukakan. Karena, saya terbiasa dengan reaksi-redux dan menggunakannya di semua proyek, saya akan terus menggunakannya. (Tidak ada insentif bagi saya untuk berubah).

Tetapi jika Anda mempelajari redux hanya hari ini, dan Anda belum menggunakannya di mana pun, ada baiknya mencoba Context API dan mengganti react-redux dengan kode API Konteks kustom Anda. Mungkin jauh lebih bersih.

Secara pribadi, ini adalah pertanyaan tentang keakraban. Tidak ada alasan yang jelas untuk memilih satu dari yang lain karena mereka setara. Dan secara internal, reaksi-redux menggunakan Konteks.

vijayst
sumber
10

Satu-satunya alasan untuk menggunakan Redux untuk saya adalah:

  • Anda menginginkan objek keadaan global (karena berbagai alasan, seperti debuggability, persistence ...)
  • Aplikasi Anda besar atau akan besar, dan harus ditingkatkan ke banyak pengembang: dalam hal ini Anda mungkin memerlukan tingkat tipuan (yaitu sistem acara): Anda memadamkan acara (di masa lalu) dan kemudian orang yang tidak Anda kenal di dalam Anda organisasi dapat benar-benar mendengarkan mereka

Anda mungkin tidak memerlukan tingkat tipuan untuk seluruh aplikasi Anda, jadi tidak masalah untuk mencampur gaya dan menggunakan negara bagian / konteks dan Redux keduanya pada saat yang sama.

Sebastien Lorber
sumber
1
  • Jika Anda perlu menggunakan middleware untuk berbagai keperluan. Misalnya tindakan logging, pelaporan kesalahan, pengiriman permintaan lain tergantung pada respons server, dll.
  • Ketika data yang berasal dari banyak titik akhir memengaruhi satu komponen / tampilan.
  • Ketika Anda ingin memiliki kontrol yang lebih besar atas tindakan dalam aplikasi Anda. Redux memungkinkan tindakan pelacakan dan perubahan data, itu sangat menyederhanakan debugging.
  • Jika Anda tidak ingin respons server mengubah secara langsung keadaan aplikasi Anda. Redux menambahkan lapisan, di mana Anda dapat memutuskan bagaimana, kapan dan apakah data ini harus diterapkan. Pola pengamat. Alih-alih membuat beberapa penerbit dan pelanggan di seluruh aplikasi, Anda hanya menghubungkan komponen ke toko Redux.

Dari: Kapan menggunakan Redux?

Michał Rejman
sumber