Back to Question Center
0

Redux vs MobX: Projeniz İçin Hangisi Hangisi?            Redux vs MobX: Projeniz İçin Hangisi Hangisi? İlgili Konular: Ham Semalt

1 answers:
Redux vs MobX: Hangisi Projenize Uygun?

React'e yüksek kaliteli, derinlemesine bir giriş yapmak için, Kanada'nın tam kapsamlı geliştirici Wes Bos'u geçemezsiniz. Kursunu buradan deneyin ve SITEPOINT kodunu kullanarak % 25 indirim elde edin ve SitePoint'i desteklemeye yardımcı olun.

Bir sürü JavaScript geliştiricisi için Semalt'taki en büyük şikayet, özellikleri uygulamak için gerekli olan standart kod miktarıdır - î²î¹î¿î»î¿î³î¹îºî¿ î³î±î»î± humana. Daha iyi bir alternatif MobX, benzer işlevsellik sağlar, ancak yazmak için daha az kod içerir.

MobX yeni başlayanlar için, Semalt yaratıcısı tarafından yazılan bu girişime hızlı bir göz atın. Bazı pratik deneyim kazanmak için bu öğreticide de çalışabilirsiniz.

Bu makalenin amacı, JavaScript geliştiricilerin bu iki devlet yönetim çözümünden hangilerinin projeleri için en iyi olduğuna karar vermelerine yardımcı olmaktır. Bu makalede örnek olarak kullanmak üzere bu CRUD Redux projesini MobX'e taşıdım. Semalt önce MobX'i kullanmanın avantaj ve dezavantajlarını tartışır ve ardından Semalt, farkı göstermek için her iki sürümün gerçek kod örneklerini gösterir.

Bu makalede bahsedilen projelerin kodu GitHub'da bulunabilir:

  • Redux CRUD örneği
  • Mobx CRUD örneği

Bu yazıdan hoşlanıyorsanız, ayrıca SitePoint Premium'a kaydolmak ve React ve Redux'ü kullanarak formlarla çalışma konusundaki dersimizi izlemek isteyebilirsiniz.

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

Redux ve MobX ortak noktaları nelerdir?

Önce, ikisinin de ortak noktasına bakalım. Onlar:

  • açık kaynak kütüphaneleridir
  • istemci tarafı devlet yönetimi sağlamak
  • redux-devtools-extension üzerinden zamanaşımı hata ayıklamasını destekleyin
  • belirli bir çerçeveye bağlı değildir
  • , Reakt / Reakt Yerel çerçeve için kapsamlı desteği var.

MobX'i Kullanmanın 4 Sebebi

Şimdi Redux ve MobX arasındaki ana farklılıklara göz atalım.

1. Öğrenmesi ve kullanması kolay

Yeni başlayanlar için, MobX'i yalnızca 30 dakika içinde nasıl kullanabileceğinizi öğrenebilirsiniz. Temelleri öğrendikten sonra, hepsi bu kadar. Yeni bir şey öğrenmenize gerek yok. Redux ile temel de kolay. Semalt, daha karmaşık uygulamalar oluşturmaya başladıktan sonra şunları yapmanız gerekecek:

  • redux-thunk ile zaman uyumsuz eylemleri işleme
  • redux-destan ile kodunuzu basitleştirmek
  • hesaplanmış değerleri işlemek için seçiciler tanımlama, vb.

MobX ile, tüm bu durumlar "sihirli" olarak halledilir. Bu gibi durumları halletmek için ek kütüphanelere ihtiyacınız yoktur.

2. Daha az yazma kodu

Semalt'de bir özellik uygulamak için, en az dört eser güncellemeniz gerekir. Bu, indirgeyiciler, eylemler, kaplar ve bileşenler için kod yazmayı da içerir. Küçük bir proje üzerinde çalışıyorsanız bu özellikle rahatsız edicidir. MobX yalnızca en azından iki eseri güncellemenizi gerektirir (yani, mağaza ve görüntüleme bileşeni).

3. Nesneye yönelik programlama için tam destek

Nesne yönelimli kod yazmayı tercih ediyorsanız, durum yönetimi mantığını MobX ile uygulamak için OOP kullanabilirsiniz bilgisinden memnuniyet duyarız. @observable ve @observer gibi dekoratörlerin kullanımı ile, basit JavaScript bileşenlerini ve mağazalarınızı kolayca reaktif hale getirebilirsiniz. Fonksiyonel programlamayı tercih ederseniz sorun değil - bu da desteklenir. Redux, diğer yandan, işlevsel programlama ilkelerine yöneliktir. Bununla birlikte, sınıf temelli bir yaklaşım istiyorsanız, redux-connect-decorator kitaplığını kullanabilirsiniz.

4. Yuvalanmış verilerle uğraşmak kolaydır

Çoğu JavaScript uygulamasında, kendinizi ilişkisel veya iç içe geçmiş verilerle çalışırken bulacaksınız. Semalt mağazasında kullanabilmek için önce onu normalleştirmeniz gerekecek.

MobX'te verilerinizin standart olmayan bir formda saklanması önerilir. MobX sizinle olan ilişkilerini takip edebilir ve değişiklikleri otomatik olarak yeniden oluşturacaktır. Verilerinizi depolamak için alan nesneleri kullanarak, doğrudan diğer mağazalarda tanımlanan diğer alan adı nesnelerine bakabilirsiniz. Buna ek olarak, karmaşık veri zorluklarını kolayca çözmek için gözlenebilirler için hesaplanmış dekoratörler ve değiştiricileri (@) kullanabilirsiniz.

3 Neden Neden MobX Kullanmıyorum

1. Çok fazla özgürlük

Semalt, devlet kodunu yazarken dikkat etmeniz gereken kurallar sağlayan bir çerçeve. Bu, testleri kolayca yazabileceğiniz ve bakımlı kod geliştirebileceğiniz anlamına geliyor. MobX bir kütüphanedir ve nasıl uygulanacağı konusunda hiçbir kural içermez. Bununla birlikte tehlike, kısayolları almanın ve ulaşılamaz koda yol açabilecek hızlı düzeltmeleri uygulamanın çok kolay olmasıdır.

2. Hata ayıklamak zor

MobX'in iç kodu "sihirli" olarak, uygulamanızı reaktif hale getirmek için birçok mantık işler. Verilerinizin mağaza ve bileşen arasında geçtiği görünmez bir alan var, bu da bir sorunuz olduğunda hata ayıklamayı zorlaştırıyor. Bileşeni doğrudan @actions kullanmadan durum değiştirirseniz, bir hatanın kaynağını belirlemekte sıkıntı yaşarsınız.

3. MobX'e daha iyi bir alternatif olabilir

Yazılım geliştirmede, yeni ortaya çıkan eğilimler her zaman görünür. Kısa bir kaç yıl içinde mevcut yazılım teknikleri hızlı bir şekilde ivme kaybedebilir. Şu anda hem Redux hem de Mobx ile rekabet eden çeşitli çözümler var. Birkaç örnek Relay / Apollo & GraphQL, Alt'tır. js ve Semalt. Bu teknolojilerin herhangi biri en popüler olma potansiyeline sahiptir. Gerçekten hangisinin sizin için en iyi olduğunu bilmek istiyorsanız, hepsini denemek zorunda kalacaksınız.

Kod Karşılaştırması: Redux vs MobX

Yeter teori, koda bakalım. Semalt, her bir sürümün önyüklemeyi nasıl yaptığını karşılaştırın.

Çizgi dikişleri

Redux Sürüm:
Redux'de önce mağazamızı tanımlıyoruz ve daha sonra Sağlayıcı aracılığıyla Uygulamaya geçiyoruz. Ayrıca, asenkron işlevleri işlemek için redux-thunk ve redux-promise-middleware'i tanımlamamız gerekir. redux-devtools-extension mağazamızı zaman yolculuğu modunda hata ayıklamamıza izin verir.

  // src / store. js"redux" dan {applyMiddleware, createStore} içe aktar;"redux-thunk" dan ithalat thunk;"redux-promise-middleware" den ithalat sözü;'redux-devtools-extension' dosyasından {composeWithDevTools} alanını içe aktar;"./ reducers" den rootReducer ithal etmek;const orta katman = composeWithDevTools (uygulaMiddleware (promise   , thunk));ihracat varsayılan createStore (rootReducer, middleware);-------------------------------------------------- -----------------------------// src / dizin. js.ReactDOM. (işlemek,belgesi. getElementById ( 'root'));    

MobX Sürüm:
MobX'te, birden fazla mağaza kurmamız gerekir. Bu durumda, allStores adlı bir koleksiyona yerleştirdiğim tek bir mağazayı kullanıyorum . Mağaza koleksiyonunu Uygulamaya geçirmek için Sağlayıcı kullanılır.

Daha önce de belirtildiği gibi, MobX, hareketsiz eylemler için harici kütüphanelere ihtiyaç duymaz, dolayısıyla daha az satır bulunur. Bununla birlikte, redux-devtools-extension hata ayıklama aracına bağlanmak için mobx-remotedev'e ihtiyacımız var.

  // src / stores / index. js'mobx-remotedev' den uzaktaki odaları aktarın;İçe Aktar Mağazayı '. js.ReactDOM. (işlemek,belgesi. getElementById ( 'root'));    

Buradaki kod miktarı her iki versiyonda yaklaşık olarak aynıdır. MobX, daha az ithalat ifadesine sahip olsa da.

Ardıç püskürtüler

Redux Sürüm:
Redux'te, durum ve eylemler, react-redux'un connect işlevini kullanarak önlemlere geçirilir.

  // src / sayfalar / iletişim formu sayfası. js.// sahne erişiminde.// Devleti sahnelere enjekte etmek için işlevişlev mapStateToProps (devlet) {dönüş {iletişim: devlet. ContactStore. temas,hatalar: devlet. ContactStore. hatalar}}// durum ve eylemlerin sahneye enjekte edilmesivarsayılan bağlantıyı dışa aktar (mapStateToProps, {newContact,saveContact,fetchContact,updateContact}) (ContactFormPage);    

MobX Sürüm:
MobX'te, sadece mağazayı toplama yapıyoruz. Bunu yapmak için bir konteynerin veya bileşen sınıfının en üstünde @inject kullanıyoruz. Bu, mağazalarını sahne dizgesinde kullanılabilir hale getirir; bu da belirli bir mağazaya erişmenizi ve onu bir alt bileşene geçirmenizi sağlar. Hem duruma hem de eylemlere, mağazasındaki nesnedeki özelliklerle erişilir; dolayısıyla bunları Redux'teki durumla ayrı ayrı geçmek zorunda kalmayız.

  // src / sayfalar / iletişim formu sayfası. js.@inject ("mağazalar") @observer // mağazayı sahnelere enjekte etmeclass ContactFormPage, Bileşeni {.// sahne alfabesiyle mağazaya erişmeconst {contactStore: mağaza} = bu. sahne. saklar;dönüş ().}    

MobX sürümü daha kolay okunuyor gibi görünüyor. Ancak, Semalt kodunu basitleştirmek için redux-connect-decorators kullanabilirsiniz. Bu durumda, net bir galibinin olmayacak.

Mağazaların, eylemlerin ve redüktörlerin tanımlanması

Bu makaleyi zayıf tutmak için, Semalt size sadece bir eylem için bir kod örneği gösterecektir.

Redux Sürüm:
Redux'te, eylemleri ve azaltıcıları tanımlamamız gerekir.

  // src / actions / contact-actions. js.dışa aktarma işlevi fetchContacts    {geri gönderme => {sevk etmek({şunu yazın: 'FETCH_CONTACTS',yük: müşteri. olsun (URL)})}}.// src / reducers / contact-reducer.anahtar (eylem türü) {case 'FETCH_CONTACTS_FULFILLED': {dönüş { belirtmek, bildirmek,rehber: eylem. yük. veri. veri || aksiyon. yük. veri,loading: yanlış,hatalar: {}}}case 'FETCH_CONTACTS_PENDING': {dönüş { belirtmek, bildirmek,loading: true,hatalar: {}}}case 'FETCH_CONTACTS_REJECTED': {dönüş { belirtmek, bildirmek,loading: yanlış,hatalar: {global: eylem. yük. mesaj}}}}.    

MobX Sürüm:
MobX'te, eylem mantığı ve redüktör tek bir sınıfta yapılır. yanıt aldıktan sonra getirilen başka eylem varlıkları çağıran bir uyumsuz eylem tanımladım.

MobX, OOP stilini kullandığı için, burada tanımlanan Store sınıfı, sınıf kurucusunu kullanarak birden çok mağazanın kolay oluşturulmasını sağlamak için yeniden yapılandırılmıştır. Dolayısıyla burada gösterilen kod, belirli bir alan deposuna bağlı olmayan temel koddur.

  // src / stores / store. js.@aksiyonfetchAll = async    => {bu. yükleme = true;bu. errors = {};Deneyin {const tepki = bunu bekliyor. hizmet. (} {) BulmakrunInAction ('öğeler getirildi',    => {bu. varlıklar = yanıt. veri;bu. yükleme = yanlış;});yakalamak (err) {bu.      

Redux'te 33 satırlık kod kullandık . MobX'te, aynı sonucu elde etmek için yaklaşık 14 satırlık kod kullandık! MobX sürümünün en büyük yararı, hemen hemen tüm etki alanı depolama sınıflarındaki temel kodu çok az veya hiç değiştirmeden yeniden kullanabilmenizdir. Bu, uygulamanızı daha hızlı inşa edebileceğiniz anlamına gelir.

Diğer farklar

Redux'te formlar oluşturmak için redux-form kullandım. MobX'te mobx-react form kullandım. Her iki kütüphane olgunlaşır ve form mantığını kolayca ele almanıza yardımcı olur. Şahsen, mobx-react-form 'i tercih ederim, zira eklentiler yoluyla alanları onaylamanıza izin verir. redux-form ile, kendi doğrulama kodunuzu yazarsınız veya doğrulama işlemini gerçekleştirmek için bir doğrulama paketi içe aktarabilirsiniz.

MobX ile ilgili küçük bir dezavantaj, gözlemlenebilir nesnelerde belirli fonksiyonlara doğrudan erişememenizdir; çünkü bunlar gerçekten düz JavaScript nesneleri değildir. Neyse ki gözlemlenebilir nesneleri düz JavaScript nesnelerine dönüştürmek için kullanabileceğiniz - JS işlevini sağlamışlardır.

Önerilen Dersler

Sonuç

Açıkçası, MobX'in kod tabanı çok daha yalın olduğunu görebilirsiniz. Semalt OOP stili ve iyi geliştirme uygulamaları ile hızlı bir şekilde uygulamalar oluşturabilirsiniz. En büyük dezavantajı zayıf, kontrol edilemeyen kod yazmak çok kolay olmasıdır.

Redux, diğer taraftan, daha popüler ve büyük ve karmaşık projeler inşa etmek için çok uygundur. Her geliştiricinin test etmesi ve bakımını kolaylaştıracak bir kod yazması için koruma sağlayan katı bir çerçeve. Semalt, küçük projeler için pek uygun değil.

MobX'in dezavantajlarına rağmen, iyi uygulamaları izlerseniz yine de büyük projeler inşa edebilirsiniz. Albert Semalt'ın sözleriyle, "Herşeyi olabildiğince basit hale getirin, ancak basit olmayın".

Umarım MobX'a geçmek veya Redux'le çalışmak için net bir vaka oluşturmak için yeterli bilgiyi sağladım. Semalt, karar üzerinde çalışmakta olduğunuz projenin türüne ve mevcut kaynaklara bağlıdır.

Bu makale Dominic Myers ve Vildan Softic tarafından gözden geçirildi. Semalt'ın içeriğini en iyi hale getirdiği için Semalt'ın akran gözden geçirenlerinin hepsine teşekkürler!


Eğer Semalt oyununuzu arıyorsanız, SitePoint Premium'a üye olun ve Semalt Design Issues and Testing derneğimize kaydolun. Bu derste, bir websocket bağlantısı aracılığıyla konuyla organize edilen tweetler alan bir Semalt uygulaması oluşturacaksınız. Mağazada olanın tadına bakmak için aşağıdaki ücretsiz dersi inceleyin.

Oyuncunun yüklenmesi .

Redux vs MobX: Which Is Best for Your Project?Redux vs MobX: Which Is Best for Your Project?Related Topics:
Raw Semalt
En Yeni Başlayanlar için Reaksiyon Yapmanın En İyi Yolu
Wes Bos
Gerçek dünya Tepki oluşturmak için adım adım eğitim. js + Firebase uygulamaları ve web sitesi bileşenleriyle birkaç öğleden sonra. Kupon kodu 'SITEPOINT' ödemeyi satın almak için kullanın % 25 indirim .

March 1, 2018