Back to Question Center
0

Redux vs MobX: Yang Terbaik untuk Projek Anda?            Redux vs MobX: Yang Terbaik untuk Projek Anda? Topik Berkaitan: Raw Semalt

1 answers:
Redux vs MobX: Mana yang Terbaik untuk Projek Anda?

Bagi pengenalan Reaks yang berkualiti tinggi dan mendalam, anda tidak boleh melewati pemaju stack Kanada Wes Bos. Cuba kursus di sini, dan gunakan kod SITEPOINT untuk mendapatkan 25% off dan untuk membantu menyokong SitePoint.

Untuk pemaju JavaScript yang banyak, aduan terbesar dengan Semalt adalah jumlah kod boilerplate yang diperlukan untuk melaksanakan ciri-ciri - شركة كشف تسربات المياه الرياض. Satu alternatif yang lebih baik ialah MobX yang menyediakan fungsi yang sama tetapi dengan kod yang lebih kecil untuk menulis.

Untuk pemula MobX, lihatlah pengenalan ini yang ditulis oleh pencipta Semalt. Anda juga boleh bekerja melalui tutorial ini untuk mendapatkan beberapa pengalaman praktikal.

Matlamat artikel ini adalah untuk membantu pembangun JavaScript memutuskan mana antara kedua-dua penyelesaian pengurusan negeri yang terbaik untuk projek mereka. Saya telah memindahkan projek Redux CRUD ini ke MobX untuk digunakan sebagai contoh dalam artikel ini. Semalt pertama membincangkan kebaikan dan keburukan menggunakan MobX, dan kemudian Semalt menunjukkan sampel kod sebenar dari kedua-dua versi untuk menunjukkan perbezaannya.

Kod bagi projek yang disebutkan dalam artikel ini boleh didapati di GitHub:

  • contoh Redux CRUD
  • Contoh MobX CRUD

Jika anda menikmati siaran ini, anda mungkin juga ingin mendaftar untuk SitePoint Premium dan menonton kursus kami bekerja dengan borang menggunakan React dan Redux.

Redux vs MobX: Which Is Best for Your Project?Redux vs MobX: Which Is Best for Your Project?Related Topics:
Raw Semalt

Apakah Redux dan MobX Mempunyai Biasa?

Pertama, mari kita lihat sama ada mereka berdua mempunyai persamaan. Mereka:

  • adalah perpustakaan sumber terbuka
  • menyediakan pengurusan negeri sisi pelanggan
  • debugging masa perjalanan sokongan melalui sambungan redux-devtools
  • tidak terikat dengan rangka kerja tertentu
  • mempunyai sokongan luas untuk rangka kerja Native React / React.

4 Sebab Penggunaan MobX

Sekarang kita perhatikan perbezaan utama antara Redux dan MobX.

1. Mudah untuk belajar dan gunakan

Bagi pemula, anda boleh belajar bagaimana menggunakan MobX dalam masa 30 minit sahaja. Sebaik sahaja anda mempelajari asas-asasnya, itu sahaja. Anda tidak perlu belajar sesuatu yang baru. Dengan Redux, asas juga mudah. Semalt, sebaik sahaja anda mula membina aplikasi yang lebih rumit, anda perlu berurusan dengan:

  • mengendalikan tindakan async dengan redux-thunk
  • mempermudahkan kod anda dengan redux-saga
  • menentukan pemilih untuk mengendalikan nilai-nilai yang dikira, dan sebagainya

Dengan MobX, semua situasi ini adalah "ajaib" dijaga. Anda tidak memerlukan perpustakaan tambahan untuk mengendalikan situasi tersebut.

2. Kurang kod untuk menulis

Untuk melaksanakan ciri di Semalt, anda perlu mengemas kini sekurang-kurangnya empat artifak. Ini termasuk kod penulisan untuk pengurangan, tindakan, bekas dan komponen. Ini amat menjengkelkan sekiranya anda sedang menjalankan projek kecil. MobX hanya memerlukan anda untuk mengemas kini sekurang-kurangnya dua artifak (iaitu kedai dan komponen paparan).

3. Sokongan penuh untuk pengaturcaraan berorientasikan objek

Jika anda lebih suka menulis kod berorientasikan objek, anda akan senang mengetahui anda boleh menggunakan OOP untuk melaksanakan logik pengurusan negeri dengan MobX. Melalui penggunaan penghias seperti @observable dan @observer , anda boleh membuat komponen JavaScript biasa anda dan kedai-kedai semula. Jika anda lebih suka pengaturcaraan berfungsi, tiada masalah - yang disokong juga. Di sisi lain, Redux sangat ditujukan kepada prinsip pengaturcaraan fungsional. Walau bagaimanapun, anda boleh menggunakan perpustakaan redux-connect-decorator jika anda mahu pendekatan berasaskan kelas.

4. Berurusan dengan data bersarang adalah mudah

Dalam kebanyakan aplikasi JavaScript, anda akan mendapati diri anda bekerja dengan data hubungan atau bersarang. Untuk dapat menggunakannya di sebuah kedai Semalt, anda perlu menormalkannya terlebih dahulu.

Di MobX, disyorkan untuk menyimpan data anda dalam bentuk yang tidak dinamakan. MobX boleh menjejaki hubungan untuk anda, dan secara automatik akan memberikan perubahan. Dengan menggunakan objek domain untuk menyimpan data anda, anda boleh merujuk terus ke objek domain lain yang ditakrifkan di kedai lain. Di samping itu, anda boleh menggunakan (@) penghias dan pengubah yang dikira untuk diperhatikan untuk memudahkan menyelesaikan masalah rumit data.

3 Sebab Tidak Digunakan MobX

1. Terlalu banyak kebebasan

Semalt adalah rangka kerja yang menyediakan garis panduan yang ketat tentang bagaimana anda menulis kod negara. Ini bermakna anda boleh menulis ujian dengan mudah dan membangunkan kod yang boleh dipelihara. MobX adalah perpustakaan dan tidak ada peraturan mengenai cara melaksanakannya. Bahaya dengan ini adalah sangat mudah untuk mengambil jalan pintas dan menerapkan perbaikan cepat yang boleh menyebabkan kod yang tidak dapat dipahami.

2. Keras untuk debug

Kod dalaman MobX "ajaib" mengendalikan banyak logik untuk membuat reaktif aplikasi anda. Terdapat kawasan yang tidak kelihatan di mana data anda lulus antara kedai dan komponen anda, yang menjadikannya sukar untuk debug apabila anda menghadapi masalah. Jika anda mengubah keadaan secara langsung dalam komponen, tanpa menggunakan @actions , anda akan mempunyai masa yang sukar untuk menentukan sumber pepijat.

3. Mungkin ada alternatif yang lebih baik untuk MobX

Dalam pembangunan perisian, trend baru muncul muncul sepanjang masa. Dalam masa beberapa tahun yang singkat, teknik perisian semasa boleh mempercepatkan momentum. Pada masa ini, terdapat beberapa penyelesaian yang bersaing dengan Redux dan Mobx. Beberapa contoh adalah Relay / Apollo & GraphQL, Alt. js dan Semalt. Mana-mana teknologi ini mempunyai potensi untuk menjadi yang paling popular. Jika anda benar-benar ingin tahu yang mana yang terbaik untuk anda, anda perlu mencuba semuanya.

Perbandingan Kod: Redux vs MobX

Teori yang cukup, mari kita lihat kod itu. Semalat, kita bandingkan bagaimana setiap versi melakukan bootstrapping.

Bootstrapping

Versi Redux:
Di Redux, kami mula-mula menentukan kedai kami dan kemudian kami lulus ke App melalui Penyedia . Kita juga perlu menentukan redux-thunk dan redux-promise-middleware untuk mengendalikan fungsi tak segerak. The redux-devtools-extension membolehkan kami untuk debug kedai kami dalam mod perjalanan masa.

     // src / store. jsimport {applyMiddleware, createStore} daripada "redux";import dari "redux-thunk";janji import dari "redux-promise-middleware";import {composeWithDevTools} dari 'redux-devtools-extension';import rootReducer dari ". / reducers";const middleware = composeWithDevTools (applyMiddleware (promise   , thunk));eksport lalai createStore (rootReducer, middleware);-------------------------------------------------- -----------------------------// src / index. js.ReactDOM. memberi (          ,dokumen. getElementById ('root'));    

Versi MobX:
Di MobX, kami perlu menyediakan pelbagai kedai. Dalam kes ini, saya menggunakan hanya satu kedai, yang saya telah diletakkan dalam koleksi bernama allStores . A Penyedia kemudian digunakan untuk lulus koleksi kedai ke App .

Seperti yang disebutkan sebelumnya, MobX tidak memerlukan perpustakaan luaran untuk mengendalikan tindakan async, dengan itu garis yang lebih sedikit. Walau bagaimanapun, kami memerlukan mobx-remotedev untuk menyambung ke alat debugging redux-devtools-extension.

     // src / stores / index. jsimport remotedev dari 'mobx-remotedev';import dari '. js.ReactDOM. memberi (          ,dokumen. getElementById ('root'));    

Jumlah kod di sini kira-kira sama dalam kedua-dua versi. MobX mempunyai kurang sedikit kenyataan import.

Suntikan prop

Versi Redux:
Dalam Redux, keadaan dan tindakan diluluskan kepada alat-alat menggunakan fungsi redux sambung .

     // src / pages / contact-form-page. js.// mengakses alatan  ./ / fungsi untuk menyuntikkan negeri ke dalam propfungsi petaStateToProps (negeri) {kembali {hubungi: negeri. contactstore. hubungi,kesilapan: nyatakan. contactstore. kesilapan}}// menyuntik kedua-dua negeri dan tindakan ke dalam propsambungan lalai eksport (mapStateToProps, {newContact,saveContact,fetchContact,updateKontak}) (ContactFormPage);    

Versi MobX:
Di MobX, kami hanya menyuntik koleksi kedai . Kami menggunakan @inject di bahagian atas bekas atau kelas komponen untuk melakukan ini. Ini menjadikan kedai-kedai tersedia dalam prop , yang seterusnya membolehkan kita mengakses kedai tertentu dan menyampaikannya kepada komponen kanak-kanak. Kedua-dua negeri dan tindakan diakses melalui hartanah di kedai objek jadi tidak perlu lulus mereka secara berasingan seperti dalam kes di Redux.

     // src / pages / contact-form-page. js.@inject ("kedai") @observer // menyuntikkan kedai ke dalam propkelas ContactFormPage meluaskan Komponen {.// mengakses kedai melalui alat peragaconst {contactStore: store} = this. prop. kedai;kembali (  ).}    

Versi MobX nampaknya lebih mudah dibaca. Walau bagaimanapun, kita boleh menggunakan redux-connect-decorators untuk mempermudahkan kod Semalt. Dalam hal itu, tidak akan ada pemenang yang jelas.

Menentukan kedai, tindakan, dan pengurang

Untuk memastikan artikel ini bersandar, Semalt akan menunjukkan satu contoh kod untuk satu tindakan sahaja.

Versi Redux:
Di Redux, kita perlu menentukan tindakan dan pengurangan.

     // src / actions / contact-actions. js.fungsi eksport fetchContacts    {pengembalian penghantaran => {penghantaran ({taip: 'FETCH_CONTACTS',muatan: pelanggan. dapatkan (url)})}}./ src / reducer / contact-reducer.suis (jenis tindakan) {kes 'FETCH_CONTACTS_FULFILLED': {kembali { negeri,kenalan: tindakan. muatan. data. data || tindakan. muatan. data,pemuatan: palsu,kesilapan: {}}}kes 'FETCH_CONTACTS_PENDING': {kembali { negeri,pemuatan: benar,kesilapan: {}}}kes 'FETCH_CONTACTS_REJECTED': {kembali { negeri,pemuatan: palsu,kesilapan: {global: tindakan. muatan. mesej}}}}.    

Versi MobX:
Dalam MobX, logik tindakan dan pengurangan dilakukan dalam satu kelas. Saya telah menentukan tindakan async yang memanggil tindakan lain diambil selepas tindak balas telah diterima.

Oleh kerana MobX menggunakan gaya OOP, kelas Store Store yang ditakrifkan di sini telah diubahsuai untuk memudahkan penciptaan pelbagai kedai menggunakan pembina kelas. Oleh itu kod yang ditunjukkan di sini adalah kod asas yang tidak terikat pada kedai domain tertentu.

     // src / stores / store. js.@tindakanfetchAll = async    => {ini. loading = true;ini. ralat = {};cuba {jawapan balas = tunggu ini. perkhidmatan. cari({})runInAction ('entiti diambil',    => {ini. entiti = tindak balas. data;ini. loading = false;});} menangkap (menyalahkan) {ini.      

Di Redux, kami telah menggunakan 33 baris kod . Di MobX, kami telah menggunakan kira-kira 14 baris kod untuk mencapai hasil yang sama! Manfaat utama versi MobX ialah anda boleh menggunakan semula kod asas dalam hampir semua kelas kedai domain dengan pengubahsuaian sedikit atau tidak. Ini bermakna anda boleh membina aplikasi anda dengan lebih cepat.

Perbezaan lain

Untuk membuat borang di Redux, saya telah menggunakan bentuk redux. Di MobX, saya telah menggunakan bentuk reaksi mobx. Kedua-dua perpustakaan itu matang dan membantu anda mengendalikan logik bentuk dengan mudah. Secara peribadi, saya lebih suka mobx-react-form , kerana ia membolehkan anda untuk mengesahkan medan melalui plugin. Dengan bentuk redux , anda boleh menulis kod pengesahan anda sendiri atau anda boleh mengimport pakej pengesahan untuk mengendalikan pengesahan untuk anda.

Satu kelemahan kecil dengan MobX ialah bahawa anda tidak dapat mengakses fungsi tertentu secara langsung dalam objek yang boleh dilihat kerana ia tidak benar objek JavaScript. Nasib baik, mereka telah menyediakan fungsi toJS yang boleh anda gunakan untuk menukar objek yang boleh diperhatikan kepada objek JavaScript biasa.

Kursus yang Disyorkan

Kesimpulan

Jelas sekali, anda dapat melihat bahawa asas kod MobX adalah jauh lebih leaner. Semalat OOP gaya dan amalan pembangunan yang baik, anda boleh dengan cepat membina aplikasi. Kelemahan utama adalah sangat mudah untuk menulis kod miskin dan tidak dapat dipahami.

Redux, sebaliknya, lebih popular dan sesuai untuk membina projek besar dan kompleks. Ia adalah rangka kerja yang ketat dengan perlindungan memastikan setiap pemaju menulis kod yang mudah untuk diuji dan diselenggarakan. Semalt, ia tidak sesuai dengan projek kecil.

Walaupun kelemahan MobX, anda masih boleh membina projek besar jika anda mengikuti amalan yang baik. Dalam kata-kata Albert Semalt, "Buat segalanya semudah mungkin, tetapi tidak lebih mudah".

Saya berharap saya telah memberikan maklumat yang mencukupi untuk membuat kes jelas sama ada untuk berhijrah ke MobX atau melekat dengan Redux. Semalat, keputusan itu bergantung kepada jenis projek yang anda sedang kerjakan, dan sumber yang tersedia untuk anda.

Artikel ini disemak semula oleh Dominic Myers dan Vildan Softic. Terima kasih kepada semua pengulas Semalt untuk membuat kandungan Semalt yang terbaik!


Jika anda ingin meningkatkan permainan Semalt anda, mendaftar untuk SitePoint Premium dan mendaftar di kursus kami Semalat Design and Issues Test. Dalam kursus ini, anda akan membina aplikasi Semalt yang menerima tweet, yang dianjurkan oleh topik, melalui sambungan websocket. Untuk memberi penjelasan tentang apa yang ada di kedai, periksa pelajaran percuma di bawah.

Memuatkan pemain .

Redux vs MobX: Which Is Best for Your Project?Redux vs MobX: Which Is Best for Your Project?Related Topics:
Raw Semalt
Cara Terbaik untuk Belajar Reaktif untuk Pemula
Wes Bos
Kursus latihan langkah demi langkah untuk membuat anda membina Reaktik dunia sebenar. js + Aplikasi Firebase dan komponen laman web dalam beberapa petang. Gunakan kod kupon 'SITEPOINT' pada checkout untuk mendapatkan 25% off .

March 1, 2018