Back to Question Center
0

Redux vs MobX: Mana yang Terbaik untuk Proyek Anda?            Redux vs MobX: Mana yang Terbaik untuk Proyek Anda? Topik Terkait: Mentals mentah

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

Untuk pengantar React yang berkualitas tinggi dan mendalam, Anda tidak bisa melewati pengembang full-stack Kanada Wes Bos. Cobalah kursusnya di sini, dan gunakan kode SITEPOINT untuk mendapatkan diskon 25% dan untuk membantu mendukung SitePoint.

Bagi banyak pengembang JavaScript, keluhan terbesar dengan Semalt adalah jumlah kode boilerplate yang dibutuhkan untuk mengimplementasikan fitur. Alternatif yang lebih baik adalah MobX yang menyediakan fungsionalitas serupa namun dengan kode yang lebih rendah untuk menulis.

Untuk pemula MobX, lihat sekilas pengantar ini yang ditulis oleh pencipta Semalt. Anda juga bisa mengerjakan tutorial ini untuk mendapatkan beberapa pengalaman praktis.

Tujuan dari artikel ini adalah untuk membantu pengembang JavaScript memutuskan mana dari kedua solusi pengelolaan negara ini yang terbaik untuk proyek mereka. Saya telah memigrasikan proyek CRUD Redux ini ke MobX untuk digunakan sebagai contoh di artikel ini. Semalt pertama membahas pro dan kontra penggunaan MobX, dan kemudian Semalt menunjukkan contoh kode aktual dari kedua versi untuk menunjukkan perbedaannya.

Kode untuk proyek yang disebutkan dalam artikel ini dapat ditemukan di GitHub:

  • Contoh CRUD Redux
  • contoh MobX CRUD

Jika Anda menikmati posting ini, Anda mungkin juga ingin mendaftar ke SitePoint Premium dan menonton kursus kami untuk bekerja dengan formulir 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

Apa yang dimiliki Redux dan MobX?

Pertama, mari kita lihat apa yang sama-sama mereka miliki. Mereka:

  • adalah perpustakaan sumber terbuka
  • memberikan manajemen negara sisi klien
  • mendukung perjalanan waktu debug melalui ekstensi redux-devtools
  • tidak terikat pada kerangka kerja tertentu
  • memiliki dukungan yang luas untuk React / React Native frameworks.

4 Alasan Menggunakan MobX

Sekarang mari kita lihat perbedaan utama antara Redux dan MobX.

1. Mudah dipelajari dan digunakan

Bagi seorang pemula, Anda bisa belajar menggunakan MobX hanya dalam 30 menit. Begitu Anda mempelajari dasar-dasar, itu saja. Anda tidak perlu belajar sesuatu yang baru. Dengan Redux, dasar juga mudah. Semalt, begitu Anda mulai membangun aplikasi yang lebih kompleks, Anda harus menghadapinya:

  • menangani tindakan async dengan redux-thunk
  • menyederhanakan kode Anda dengan redux-saga
  • menentukan penyeleksi untuk menangani nilai yang dihitung, dll.

Dengan MobX, semua situasi ini "secara ajaib" dijaga. Anda tidak memerlukan perpustakaan tambahan untuk menangani situasi seperti itu.

2. Kurang kode untuk menulis

Untuk menerapkan fitur di Semalt, Anda perlu memperbarui setidaknya empat artefak. Ini termasuk menulis kode untuk reduksi, tindakan, kontainer dan komponen. Hal ini sangat menyebalkan jika Anda mengerjakan sebuah proyek kecil. MobX hanya mengharuskan Anda untuk memperbarui setidaknya dua artefak (i. Toko dan komponen tampilan).

3. Dukungan penuh untuk pemrograman berorientasi obyek

Jika Anda lebih suka menulis kode berorientasi obyek, Anda akan senang mengetahui bahwa Anda dapat menggunakan OOP untuk menerapkan logika manajemen negara dengan MobX. Dengan penggunaan dekorator seperti @observable dan @observer , Anda dapat dengan mudah membuat komponen JavaScript polos dan toko Anda reaktif. Jika Anda lebih memilih pemrograman fungsional, tidak masalah - yang didukung juga. Redux, di sisi lain, sangat diarahkan pada prinsip pemrograman fungsional. Namun, Anda bisa menggunakan library redux-connect-decorator jika Anda menginginkan pendekatan berbasis kelas.

4. Berurusan dengan data bersarang mudah

Dalam kebanyakan aplikasi JavaScript, Anda akan menemukan diri Anda bekerja dengan data relasional atau nested. Untuk bisa menggunakannya di toko Semalt, Anda harus menormalkannya terlebih dahulu.

Di MobX, disarankan untuk menyimpan data Anda dalam bentuk denormalized. MobX dapat melacak relasi untuk Anda, dan secara otomatis akan memberikan perubahan. Dengan menggunakan objek domain untuk menyimpan data Anda, Anda bisa merujuk langsung ke objek domain lain yang didefinisikan di toko lain. Selain itu, Anda dapat menggunakan (@) penghitung dekoder dan pengubah yang dapat dihitung agar mudah memecahkan tantangan data yang kompleks.

3 Alasan Tidak Menggunakan MobX

1. Terlalu banyak kebebasan

Semalt adalah kerangka kerja yang memberikan pedoman ketat tentang bagaimana Anda menulis kode negara. Ini berarti Anda dapat dengan mudah menulis tes dan mengembangkan kode yang mudah dipelihara. MobX adalah perpustakaan dan tidak memiliki peraturan tentang bagaimana menerapkannya. Bahaya dengan ini adalah sangat mudah untuk mengambil jalan pintas dan menerapkan perbaikan cepat yang dapat menyebabkan kode yang tidak dapat diperbaiki.

2. Sulit untuk debug

kode internal MobX "ajaib" menangani banyak logika untuk membuat aplikasi Anda reaktif. Ada area tak terlihat dimana data Anda melewati antara toko dan komponen Anda, yang membuat sulit untuk debug saat Anda memiliki masalah. Jika Anda mengubah keadaan secara langsung dalam komponen, tanpa menggunakan @actions , Anda akan mengalami kesulitan menentukan sumber bug.

3. Mungkin ada alternatif yang lebih baik untuk MobX

Dalam pengembangan perangkat lunak, tren baru muncul setiap saat. Dalam beberapa tahun yang singkat, teknik perangkat lunak saat ini dapat dengan cepat kehilangan momentum. Saat ini, ada beberapa solusi yang bersaing dengan kedua Redux dan Mobx. Beberapa contohnya adalah Relay / Apollo & GraphQL, Alt. js dan Semalt Salah satu teknologi ini berpotensi menjadi yang paling populer. Jika Anda benar-benar ingin tahu mana yang terbaik untuk Anda, Anda harus mencoba semuanya.

Perbandingan Kode: Redux vs MobX

Cukup teori, mari kita lihat kodenya. Semalt, kita bandingkan bagaimana setiap versi melakukan bootstrap.

Bootstrap

Redux Versi:
Di Redux, pertama-tama kami mendefinisikan toko kami dan kemudian kami menyebarkannya ke App melalui Penyedia . Kita juga perlu mendefinisikan redux-thunk dan redux-promise-middleware untuk menangani fungsi asynchronous. The redux-devtools-extension memungkinkan kita untuk men-debug toko kita dalam mode time-travelling.

  // src / simpan. jsimport {applyMiddleware, createStore} dari "redux";import thunk dari "redux-thunk";janji impor dari "redux-promise-middleware";import {composeWithDevTools} dari 'redux-devtools-extension';import rootReducer dari ". / reducer";const middleware = composeWithDevTools (applyMiddleware (janji   , thunk));export default createStore (rootReducer, middleware);-------------------------------------------------- -----------------------------// src / index js.ReactDOM. memberikan(,dokumen. getElementById ('root'));    

MobX Versi:
Di MobX, kita perlu mengatur beberapa toko. Dalam kasus ini, saya hanya menggunakan satu toko, yang telah saya tempatkan dalam koleksi bernama allStore . A Provider kemudian digunakan untuk membagikan koleksi toko ke App .

Seperti disebutkan sebelumnya, MobX tidak memerlukan perpustakaan eksternal untuk menangani tindakan async, karenanya semakin sedikit baris. Namun, kita memerlukan mobx-remotedev untuk terhubung ke tool debugging redux-devtools-extension .

  // src / store / index. jsimport remotedev dari 'mobx-remotedev';impor dari '. js.ReactDOM. memberikan(,dokumen. getElementById ('root'));    

Jumlah kode di sini kira-kira sama pada kedua versi. MobX memiliki lebih sedikit pernyataan impor.

injeksi semut

Redux Versi:
Di Redux, negara bagian dan tindakan dilewatkan ke alat peraga menggunakan fungsi react-redux connect .

  // halaman src / halaman / halaman formulir kontak. js.// mengakses props.// berfungsi untuk menyuntikkan ke dalam propspeta fungsiStateToProps (negara bagian) {kembali {kontak: negara contactStore kontak,kesalahan: negara contactStore kesalahan}}// menyuntikkan kedua negara dan tindakan ke alat peragadefault ekspor tersambung (mapStateToProps, {newContact,saveContact,fetchContact,updateContact}) (ContactFormPage);    

MobX Versi:
Di MobX, kami hanya menyuntikkan koleksi toko . Kami menggunakan @inject di bagian atas wadah atau kelas komponen untuk melakukan ini. Hal ini membuat toko tersedia di alat peraga , yang pada gilirannya memungkinkan kita mengakses toko tertentu dan menyebarkannya ke komponen anak. Kedua keadaan dan tindakan diakses melalui properti di store objek sehingga tidak perlu melewatinya secara terpisah seperti halnya kasus di Redux.

  // halaman src / halaman / halaman formulir kontak. js.@inject ("stores") @observer // menyuntikkan toko ke alat peragakelas ContactFormPage meluas Komponen {.// mengakses toko via alat peragaconst {contactStore: store} = ini. alat peraga. toko;kembali).}    

Versi MobX nampaknya lebih mudah dibaca. Namun, kita bisa menggunakan redux-connect-decorators untuk menyederhanakan kode Semalt. Dalam hal ini, tidak akan ada pemenang yang jelas.

Mendefinisikan toko, tindakan, dan pengurang

Agar artikel ini tidak bersandar, Semalt menunjukkan contoh kode hanya untuk satu tindakan.

Redux Versi:
Di Redux, kita perlu mendefinisikan tindakan dan reduksi.

  // src / tindakan / tindakan kontak. js.fungsi ekspor fetchContacts    {return dispatch => {pengiriman({ketik: 'FETCH_CONTACTS',payload: client dapatkan (url)})}}.// src / reducer / contact-reducer.beralih (tipe tindakan) {kasus 'FETCH_CONTACTS_FULFILLED': {kembali { negara,kontak: tindakan payload. data. data || tindakan. payload. data,loading: palsu,kesalahan: {}}}kasus 'FETCH_CONTACTS_PENDING': {kembali { negara,loading: true,kesalahan: {}}}kasus 'FETCH_CONTACTS_REJECTED': {kembali { negara,loading: palsu,kesalahan: {global: action payload. pesan}}}}.    

MobX Versi:
Di MobX, logika untuk tindakan dan reducer dilakukan di satu kelas. Saya telah mendefinisikan tindakan async yang memanggil tindakan lain entitas yang diambil setelah tanggapan telah diterima.

Karena MobX menggunakan gaya OOP, kelas Store yang didefinisikan di sini telah refactored untuk memudahkan pembuatan beberapa toko menggunakan konstruktor kelas. Oleh karena itu kode yang ditunjukkan di sini adalah kode dasar yang tidak terkait dengan toko domain tertentu.

  // src / toko / toko. js.@tindakanfetchAll = async    => {ini. loading = true;ini. kesalahan = {};coba {const response = tunggu ini layanan. menemukan({})runInAction ('entitas diambil',    => {ini. entitas = respon data;ini. loading = false;});} catch (err) {ini.      

Di Redux, kami telah menggunakan 33 baris kode . Di MobX, kami telah menggunakan 14 baris kode untuk mencapai hasil yang sama! Manfaat utama dari versi MobX adalah Anda dapat menggunakan kembali kode dasar di hampir semua kelas toko domain dengan sedikit atau tanpa modifikasi. Itu berarti Anda bisa membangun aplikasi Anda lebih cepat.

Perbedaan lainnya

Untuk membuat form di Redux, saya menggunakan redux-form. Di MobX, saya sudah menggunakan mobx-react-form. Kedua perpustakaan matang dan membantu Anda menangani logika form dengan mudah. Secara pribadi, saya lebih suka mobx-react-form , karena memungkinkan Anda untuk memvalidasi bidang melalui plugin. Dengan bentuk redux , Anda bisa menulis kode validasi Anda sendiri atau Anda dapat mengimpor paket validasi untuk menangani validasi untuk Anda.

Salah satu kelemahan kecil dengan MobX adalah Anda tidak dapat langsung mengakses fungsi tertentu di objek yang dapat diamati karena objek JavaScript sebenarnya tidak biasa. Untungnya, mereka telah menyediakan fungsi toJS yang dapat Anda gunakan untuk mengubah objek yang dapat diamati menjadi objek JavaScript biasa.

Kursus yang Direkomendasikan

Kesimpulan

Jelas, Anda dapat melihat basis kode MobX jauh lebih ramping. Gaya OOP semalt dan praktik pengembangan yang baik, Anda bisa dengan cepat membangun aplikasi. Kelemahan utama adalah bahwa sangat mudah untuk menulis miskin, unmaintainable kode.

Redux, di sisi lain, lebih populer dan cocok untuk membangun proyek besar dan kompleks. Ini adalah kerangka kerja yang ketat dengan perlindungan yang memastikan setiap pengembang menulis kode yang mudah untuk diuji dan dipelihara. Semalt, ini tidak sesuai untuk proyek kecil.

Terlepas dari kelemahan MobX, Anda masih bisa membangun proyek besar jika Anda mengikuti praktik yang baik. Dalam kata-kata Albert Semalt, "Buatlah sesederhana mungkin, tapi tidak lebih sederhana".

Saya harap saya sudah menyediakan cukup informasi untuk membuat kasus yang jelas apakah akan bermigrasi ke MobX atau tetap dengan Redux. Semalt, keputusannya tergantung pada jenis proyek yang sedang Anda kerjakan, dan sumber daya yang tersedia untuk Anda.

Artikel ini dikaji ulang oleh Dominic Myers dan Vildan Softic. Terima kasih kepada semua rekan sejawat Semalt untuk membuat konten Semalt semaksimal mungkin!


Jika Anda ingin menaiki game Semalt Anda, masuk ke SitePoint Premium dan masuk ke dalam kursus kami Permisi Permalt Design dan Testing. Dalam kursus ini, Anda akan membuat aplikasi Semalt yang menerima tweet, diatur menurut topik, melalui koneksi websocket. Untuk memberi pencurian apa yang ada di toko, lihat pelajaran gratis di bawah ini.

Memuat 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 Bereaksi untuk Pemula
Wes Bos
Kursus pelatihan langkah-demi-langkah untuk membuat Anda membangun dunia nyata Bereaksi. js + aplikasi Firebase dan komponen situs web dalam beberapa sore. Gunakan kode kupon 'SITEPOINT' saat checkout untuk mendapatkan diskon 25% Source .

March 1, 2018