Back to Question Center
0

Redux vs MobX: Mikä on paras projekteesi?            Redux vs MobX: Mikä on paras projekteesi? Raw Semalt

1 answers:
Redux vs MobX: Mikä on paras projektiin?

Reactin laadukkaan ja syvällisen käyttöönoton lisäksi et voi ohittaa kanadalaista täyspinoa kehittäjä Wes Bosia. Kokeile kurssia täällä ja käytä koodia SITEPOINT saadaksesi 25% pois ja avustamaan SitePointia.

Useiden JavaScript-kehittäjien kohdalla suurin ongelma Semaltin kanssa on se, kuinka paljon koodauskoodia tarvitaan ominaisuuksien toteuttamiseen. Parempi vaihtoehto on MobX, joka tarjoaa samanlaisia ​​toimintoja, mutta vähemmän koodia kirjoittaa - apple iphone accessories online.

MobX-aloittelijoille, tutustu nopeasti Semaltin luojan kirjoittamaan johdantoon. Voit myös työskennellä tämän opetusohjelman avulla saadaksesi käytännön kokemusta.

Tämän artikkelin tarkoituksena on auttaa JavaScript-kehittäjiä päättämään, kumpi näistä kahdesta valtionhallintaratkaisusta on paras heidän projekteihinsä. Olen siirtänyt CRUD Redux -projektin MobX: ksi, jota voin käyttää esimerkkinä tässä artikkelissa. Semalt keskustelee ensin MobX: n käytännöistä ja haitoista ja sitten Semalt näyttää kummastakin versiosta todelliset koodinäytteet, jotta se osoittaisi eron.

Tässä artiklassa mainittujen hankkeiden koodi löytyy GitHubista:

  • Redux CRUD esimerkki
  • MobX CRUD -esimerkki

Jos pidät tästä postista, saatat myös halutessasi liittyä SitePoint Premium -ohjelmaan ja katsella kurssiamme Reactin ja Reduxin lomakkeiden kanssa.

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

Mitä Redux ja MobX ovat yhteisesti?

Katsotaan ensin, mitä molemmilla on yhteisiä. He:

  • ovat avoimen lähdekoodin kirjastot
  • tarjoavat asiakaspuolen valtionhallinnolle
  • tukevat aikamatkojen virheenkorjausta redux-devtools-laajennuksen kautta
  • ei ole sidottu tiettyyn kehykseen
  • on laaja tuki React / React Native -kehyksille.

4 syytä käyttää MobX: ia

Katsotaanpa nyt tärkeimmät erot Reduxin ja MobX: n välillä.

1. Helppo oppia ja käyttää

Aloittelijan voit oppia käyttämään MobXia vain 30 minuutissa. Kun olet oppinut perusasiat, niin se on. Sinun ei tarvitse oppia mitään uutta. Reduxin perusteet ovat myös helppoja. Kun aloitat monimutkaisten sovellusten rakentamisen, sinun on käsiteltävä:

  • käsittelemällä async-toimia red-thunkilla
  • yksinkertaistamalla koodisi redux-sagalla
  • , jotka määrittävät valitsimia käsittelemään laskettuja arvoja jne.

MobX: n kanssa kaikki nämä tilanteet ovat "maagisesti" hoidettuja. Sinun ei tarvitse lisätä kirjastoja tällaisten tilanteiden hoitamiseen.

2. Vähemmän koodia kirjoittaa

Semaltin ominaisuuden toteuttamiseksi sinun on päivitettävä vähintään neljä esineistöä. Tämä sisältää kirjoituskoodin vähennysventtiileille, toiminnoille, säiliöille ja komponenteille. Tämä on erityisen ärsyttävää, jos työskentelet pienessä projektissa. MobX vaatii vain, että päivität vähintään kaksi esineistöä (eli myymälä ja katselukomponentti).

3. Täydellinen tuki objektiohjelmiin

Jos haluat kirjoittaa objektiohjattuja koodeja, voit olla tyytyväinen siihen, että voit käyttää OOP: ia toteuttamaan valtionhallintalogiikkaa MobX: n kanssa. Käyttämällä koristeita, kuten @observable ja @observer , voit helposti tehdä selkeät JavaScript-komponentit ja tallentaa reagoivat. Jos haluat toiminnallista ohjelmointia, ei ole ongelmaa - sitä tuetaan myös. Redux puolestaan ​​on suunnattu voimakkaasti toiminnallisiin ohjelmointiperiaatteisiin. Voit kuitenkin käyttää redux-connect-decorator-kirjastoa, jos haluat luokan pohjaisen lähestymistavan.

4. Sisäkkäisten tietojen käsittely on helppoa

Useimmissa JavaScript-sovelluksissa löydät itsesi tekemällä relaatiotietojen tai sisäkkäisten tietojen kanssa. Jotta voit käyttää sitä Semalt-myymälässä, sinun on ensin normalisoitava se.

MobX: ssä suosittelemme tallentamaan tietosi ilman denormaloitua muotoa. MobX voi seurata suhteita puolestasi ja tekee muutokset automaattisesti uudelleen. Käyttämällä verkkotunnuksen kohteita tietojen tallentamiseksi voit viitata suoraan muihin verkkokauppoihin määritettyihin verkkotunnisteisiin. Lisäksi voit käyttää (@) laskeutuneita sisustus- ja modifiointilaitteita havainnoitaville käyttäjille, jotta voit helposti ratkaista monimutkaisia ​​tiedonhaasteita.

3 syytä olla käyttämättä MobX

1. Liian paljon vapautta

Semalt on kehys, joka antaa tiukat ohjeet siitä, miten kirjoitat valtion koodia. Tämä tarkoittaa, että voit helposti kirjoittaa testejä ja kehittää ylläpidettävää koodia. MobX on kirjasto eikä sillä ole sääntöjä sen toteuttamisesta. Vaara tästä on se, että on helppo ottaa pikakuvakkeita ja käyttää nopeita korjauksia, jotka voivat johtaa avautumattomaan koodiin.

2. Vaikea virheenkorjaus

MobX: n sisäinen koodi "maagisesti" käsittelee paljon logiikkaa, jotta sovelluksesi on reagoiva. On näkymättömällä alueella, jossa tietosi kulkevat myymälän ja komponentin välillä, mikä vaikeuttaa virheiden suorittamista, kun sinulla on ongelma. Jos muutat tilan suoraan komponentteihin, käyttämättä @actions , sinun on vaikea havaita virheen lähde.

3. MobX

voisi olla parempi vaihtoehto,

Ohjelmistokehityksessä syntyy uusia kehittymässä olevia suuntauksia koko ajan. Muutamien lyhyiden vuosien aikana nykyiset ohjelmistotekniikat voivat nopeasti lyödä vauhtia. Tällä hetkellä on olemassa useita ratkaisuja, jotka kilpailevat sekä Reduxin että Mobxin kanssa. Muutamia esimerkkejä ovat Relay / Apollo & GraphQL, Alt. js ja semalt. Jokin näistä tekniikoista voi tulla suosituin. Jos todella haluat tietää, mikä on sinulle paras, sinun täytyy kokeilla niitä kaikkia.

Koodi Vertailu: Redux vs MobX

Tarpeeksi teoria, katsotaan koodia. Mieti, verrataan miten jokainen versio käynnistyy.

Bootstrapping

Redux Versio:
Reduxissa määritellään ensin myymälä ja siirrämme sen sitten App kautta Palveluntarjoaja . Meidän on myös määriteltävä redux-thunk ja redux-lupaus-middleware asynkronisten toimintojen käsittelemiseksi. redux-devtools-laajennus antaa meille mahdollisuuden debugata myymälämme aikamatkalla.

  // src / myymälä. jstuonti {applyMiddleware, createStore} osoitteesta "redux";tuonti thunkista "redux-thunk";tuoda lupaus "redux-lupaus-väliohjelmasta";tuoda {composeWithDevTools} osoitteesta "redux-devtools-extension";tuonti rootReducer ". / reducers";const middleware = composeWithDevTools (applyMiddleware (lupaus   , thunk));viedä default createStore (rootReducer, middleware);-------------------------------------------------- -----------------------------// src / index. js.ReactDOM. tehdä (,asiakirja. getElementById ( 'root'));    

MobX Versio:
MobX: ssä meidän on asetettava useita myymälöitä. Tässä tapauksessa käytän vain yhtä myymälää, jonka olen tallentanut koko allStores-kokoelmaan . A Palveluntarjoajaa käytetään sitten siirtämään tallennusmallisto sovellukseen .

Kuten aiemmin mainittiin, MobX ei tarvitse ulkoisia kirjastoja käsittelemään asynketoimintoja, joten vähemmän rivejä. Me kuitenkin tarvitsemme mobx-remotedev yhteyden redux-devtools-extension virheenkorjaustyökaluun.

  // src / myymälät / indeksi. jstuoda remotedev "mobx-remotedev";tuonti Säilytä ". js.ReactDOM. tehdä (,asiakirja. getElementById ( 'root'));    

Koodin määrä on suunnilleen suunnilleen sama molemmissa versioissa. MobX: llä on kuitenkin vähemmän tuontituloksia.

Props injektio

Redux Versio:
Reduxissa tila ja toiminnot siirretään rekvisiireihin käyttäen reaktion reduxin connect -toimintoa.

  // src / pages / contact-form-page. js.// rekrytointi.// toiminto tilan pistämiseksi rekvisiittatoiminto mapStateToProps (tila) {paluu {ota yhteyttä: tila. contactStore. ottaa yhteyttä,virheet: tila. contactStore. virheitä}}// injektoidaan sekä valtio että toimet rekvisiittaviedä oletusliittymä (mapStateToProps, {newContact,saveContact,fetchContact,updateContact}) (ContactFormPage);    

MobX Versio:
MobX: ssä me yksinkertaisesti pistämme myymälän keräämisen. Tätä varten käytämme @inject kontin tai komponenttiluokan yläosassa. Tämä tekee myymälöistä saatavana rekistereitä , mikä puolestaan ​​antaa meille pääsyn tiettyyn myymälään ja siirtää sen lapsikomponentille. Molemmissa tilanoissa ja toiminnoissa käytetään store objektin ominaisuuksia, joten niitä ei tarvitse siirtää erikseen, kuten Reduxin tapauksessa.

  // src / pages / contact-form-page. js.@inject ("tallentaa") @observer // injektoidaan tallentaa rekvisiittaluokan ContactFormPage laajentaa komponentti {.// pääsy tallentaa rekvisiittaconst {contactStore: store} = tämä. rekvisiitta. myymälöissä;palautus ().}    

MobX-versio näyttää olevan helpompi lukea. Kuitenkin voimme käyttää redux-connect-decorators yksinkertaistaa Semalt koodi. Siinä tapauksessa ei ole selkeää voittajaa.

Myymälöiden, toimien ja vähennysten määrittäminen

Jotta tämä artikkeli olisi vähäinen, Semalt näyttää koodinäytteen vain yhdestä toiminnosta.

Redux Versio:
Reduxissa meidän on määriteltävä toimet ja vähennykset.

  // src / actions / contact-actions. js.vientitoiminto fetchContacts    {palautus lähetys => {lähettää({tyyppi: 'FETCH_CONTACTS',hyötykuorma: asiakas. saada (url)})}}.// src / reducers / contact-reducer.kytkin (toiminta-tyyppi) {tapaus 'FETCH_CONTACTS_FULFILLED': {palautus { osavaltio,yhteystiedot: toiminta. hyötykuorma. tiedot. tiedot || toiminta. hyötykuorma. data,lataus: väärä,virheet: {}}}tapaus 'FETCH_CONTACTS_PENDING': {palautus { osavaltio,lataus: true,virheet: {}}}tapaus 'FETCH_CONTACTS_REJECTED': {palautus { osavaltio,lataus: väärä,virheet: {global: action. hyötykuorma. viesti}}}}.    

MobX Versio:
MobX: ssä toiminnan logiikka ja vähennysventtiili suoritetaan yhdessä luokassa. Olen määritellyt async-toiminnon, joka kutsuu toista toimintaa , jotka on haettu , kun vastaus on vastaanotettu.

Koska MobX käyttää OOP-tyyliä, tässä määritelty Store -luokka on tarkistettu, jotta se voi helposti luoda useita kauppoja luokan konstruktorilla. Tästä syystä tässä esitetty koodi on peruskoodi, joka ei ole sidoksissa tiettyyn verkkotunnukseen.

  // src / tallentaa / säilytä. js.@toimintafetchAll = async    => {Tämä. loading = true;Tämä. virheet = {};yrittää {const response = odottaa tätä. palvelua. löytö({})runInAction ('haetut yksiköt',    => {Tämä. entities = vastaus. data;Tämä. loading = false;});} saalis (err) {Tämä.      

Reduxissa olemme käyttäneet 33 riviä koodia . MobX: ssa olemme käyttäneet noin 14 riviä koodia saavuttaaksemme saman tuloksen! MobX-version suurin etu on se, että pohjakoodia voi käyttää uudelleen lähes kaikissa verkkotunnuksen luokat-luokissa vain vähän tai ei ollenkaan muutoksia. Tämä tarkoittaa sitä, että voit rakentaa sovelluksesi nopeammin.

Muut erot

Reduxin lomakkeiden luomiseen olen käyttänyt redx-muotoa. MobX: ssä olen käyttänyt mobx-reaktion muotoa. Molemmat kirjastot ovat kypsiä ja auttavat käsittelemään lomake-logiikkaa helposti. Henkilökohtaisesti haluan mobx-reagoida -muodon , koska sen avulla voit vahvistaa kentät pluginien avulla. Kun redux-muodossa kirjoitat oman validointikoodin tai voit tuoda validointipaketin käsittelemään validointia sinulle.

MobX: llä on yksi pienin haittapuoli, että et voi käyttää tiettyjä toimintoja havaittavissa oleviin kohteisiin, koska ne eivät ole pelkkää JavaScript-objekteja. Onneksi he ovat toimittaneet funktion toJS , jota voit käyttää muokattavissa olevien objektien muuntamiseen tavallisille JavaScript-objekteille.

Suositellut kurssit

Päätelmä

On selvää, että MobX: n koodipohja on paljon suppeampi. Semalt OOP-tyyli ja hyvät kehityskäytännöt, voit nopeasti rakentaa sovelluksia. Tärkein haittapuoli on se, että on helppo kirjoittaa huono, ohittamaton koodi.

Redux on toisaalta suosittu ja sopii hyvin suurien ja monimutkaisten hankkeiden rakentamiseen. Se on tiukka kehys, jossa varmistetaan, että jokainen kehittäjä kirjoittaa koodia, joka on helppo testata ja ylläpitää. Semalt, se ei sovi pieniin projekteihin.

MobX: n haitoista huolimatta voit silti rakentaa suuria projekteja, jos noudatat hyviä käytäntöjä. Albert Semaltin sanojen mukaan "Tee mahdollisimman yksinkertainen, mutta ei yksinkertaisempi".

Toivon, että olen antanut tarpeeksi tietoa selkeän asian selvittämiseksi siirryttäessä MobX: hen tai kiinni Reduxin kanssa. Väärinkäyttö, päätös riippuu projektityypistä, jota olet tekemässä ja käytettävissä olevista resursseista.

Dominic Myers ja Vildan Softic tarkastelivat tätä artikkelia. Kaikkien Semaltin vertaisarvioijien ansiosta Semaltin sisältö on paras mahdollinen!


Jos etsit esiin Semalt-pelisi, kirjaudu SitePoint Premium -ohjelmaan ja kirjoita kurssimme Semalt Design Issues and Testing. Tässä kurssissa voit rakentaa Semalt-sovelluksen, joka vastaanottaa tweetejä, jotka järjestetään aiheittain, websocket-yhteyden kautta. Jotta saat maistia siitä, mitä on varastossa, tutustu vapaa oppitunnin alla.

Soittimen lataaminen .

Redux vs MobX: Which Is Best for Your Project?Redux vs MobX: Which Is Best for Your Project?Related Topics:
Raw Semalt
Paras tapa oppia reagoida aloittelijoille
Wes Bos
Vaiheittainen harjoitus, jonka avulla voit rakentaa reaalimaailman React. js + Firebase-sovelluksia ja verkkosivuston osia pari iltapäivää. Käytä kuponkikoodia SITEPOINT kassalla saadaksesi 25% .
March 1, 2018