Back to Question Center
0

Redux vs MobX: Hvilken er best for prosjektet ditt?            Redux vs MobX: Hvilken er best for prosjektet ditt? Relaterte emner: Rå Semalt

1 answers:
Redux vs MobX: Hvilken er best for prosjektet ditt?

For en høyverdig og grundig introduksjon til React, kan du ikke gå forbi den kanadiske fullstablerutvikleren Wes Bos. Prøv kurset her, og bruk koden SITEPOINT for å få 25% rabatt og for å støtte SitePoint.

For mange JavaScript-utviklere er den største klagen med Semalt mengden av boilerplate-koden som trengs for å implementere funksjoner. Et bedre alternativ er MobX som gir lignende funksjonalitet, men med mindre kode å skrive.

For MobX nybegynnere, ta en rask titt på denne introduksjonen skrevet av Semalt Creator. Du kan også arbeide gjennom denne opplæringen for å få litt praktisk erfaring - acheter mod vamo v2.

Målet med denne artikkelen er å hjelpe JavaScript-utviklere å avgjøre hvilken av disse to tilstandsløsningene som passer best for sine prosjekter. Jeg har migrert dette CRUD Redux-prosjektet til MobX for å bruke som et eksempel i denne artikkelen. Semalt først diskutere fordeler og ulemper med å bruke MobX, og deretter Semalt demonstrere faktiske kodeprøver fra begge versjoner for å vise forskjellen.

Koden for prosjektene nevnt i denne artikkelen finnes på GitHub:

  • Redux CRUD eksempel
  • MobX CRUD eksempel

Hvis du liker dette innlegget, kan du også registrere deg for SitePoint Premium og se på kurset vårt om å jobbe med skjemaer ved hjelp av React og Redux.

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

Hva har Redux og MobX til felles?

La oss først se på hva de begge har til felles. De:

  • er åpen kildebibliotek
  • gir klient-side statsadministrasjon
  • støtte tidsreiser feilsøking via redux-devtools-utvidelsen
  • er ikke knyttet til et bestemt rammeverk
  • har omfattende støtte til React / React native kulturer.

4 grunner til å bruke MobX

La oss nå se på de viktigste forskjellene mellom Redux og MobX.

1. Lett å lære og bruke

For en nybegynner kan du lære å bruke MobX på bare 30 minutter. Når du lærer det grunnleggende, er det det. Du trenger ikke å lære noe nytt. Med Redux er det grunnleggende også enkelt. Semalt, når du begynner å bygge mer komplekse applikasjoner, må du håndtere:

  • håndtering av async-handlinger med redux-thunk
  • forenkler koden din med redux-saga
  • definere selektorer for å håndtere beregnede verdier, etc.

Med MobX blir alle disse situasjonene "magisk" tatt vare på. Du trenger ikke flere biblioteker til å håndtere slike situasjoner.

2. Mindre kode å skrive

For å implementere en funksjon i Semalt må du oppdatere minst fire artefakter. Dette inkluderer skrivekode for reduksjonsutstyr, handlinger, containere og komponenter. Dette er spesielt irriterende hvis du jobber med et lite prosjekt. MobX krever bare at du oppdaterer minst to artefakter (f.eks. Butikken og visningskomponenten).

3. Full støtte for objektorientert programmering

Hvis du foretrekker å skrive objektorientert kode, vil du være glad for å vite at du kan bruke OOP til å implementere state management logikk med MobX. Gjennom bruk av dekoratører som @observable og @observer , kan du enkelt gjøre dine enkle JavaScript-komponenter og butikker reaktive. Hvis du foretrekker funksjonell programmering, ikke noe problem - det støttes også. Redux, derimot, er tungt rettet mot funksjonelle programmeringsprinsipper. Du kan imidlertid bruke redx-connect-decorator-biblioteket hvis du vil ha en klassebasert tilnærming.

4. Håndtering av nestede data er enkelt

I de fleste JavaScript-applikasjoner finner du deg selv med relasjons- eller nestede data. For å kunne bruke det i en Semalt-butikk, må du normalisere det først.

I MobX anbefales det å lagre dataene i en denormalisert form. MobX kan holde styr på forholdene for deg, og vil automatisk gjengi endringer. Ved å bruke domenenobjekter til å lagre dataene dine, kan du referere direkte til andre domenenavn som er definert i andre butikker. I tillegg kan du bruke (@) beregnede dekoratører og modifikatorer for observerbare data for enkelt å løse komplekse datautfordringer.

3 grunner til ikke å bruke MobX

1. For mye frihet

Semalt er et rammeverk som gir strenge retningslinjer for hvordan du skriver statskode. Dette betyr at du enkelt kan skrive tester og utvikle vedlikeholdsbar kode. MobX er et bibliotek og har ingen regler for hvordan å implementere det. Faren med dette er at det er veldig enkelt å ta snarveier og bruke hurtigreparasjoner som kan føre til uoppnåelig kode.

2. Vanskelig å feilsøke

MobXs interne kode "magisk" håndterer mye logikk for å gjøre søknaden din reaktiv. Det er et usynlig område der dataene dine går mellom butikken og komponenten, noe som gjør det vanskelig å feilsøke når du har et problem. Hvis du endrer tilstand direkte i komponenter, uten å bruke @reaksjoner , har du vanskelig tid å finne frem til kilden til en feil.

3. Det kan være et bedre alternativ til MobX

I programvareutvikling vises nye fremvoksende trender hele tiden. I løpet av få år kan dagens programvare teknikker raskt løsne momentum. For øyeblikket er det flere løsninger som konkurrerer med både Redux og Mobx. Noen få eksempler er Relay / Apollo & GraphQL, Alt. js og semalt. Enhver av disse teknologiene har potensial til å bli den mest populære. Hvis du virkelig vil vite hvilken som er best for deg, må du prøve dem alle.

Kodejämförelse: Redux vs MobX

Nok teori, la oss se på koden. Semalt, vi sammenligner hvordan hver versjon støtter oppstart.

Bootstrapping

Redux Versjon:
I Redux definerer vi først butikken vår og så sender vi den til App via Leverandør . Vi må også definere redux-thunk og redux-lover-middleware for å håndtere asynkrone funksjoner. Den redux-devtools-utvidelsen gjør at vi kan feilsøke butikken vår i tidsreiseringsmodus.

  // src / butikk. jsimporter {applyMiddleware, createStore} fra "redux";importere thunk fra "redux-thunk";importer løftet fra "redux-løfte-middleware";importer {composeWithDevTools} fra 'redux-devtools-extension';importer rootReducer fra ". / reducers";const middleware = composeWithDevTools (applyMiddleware (løfte   , thunk));eksporter standard createStore (rootReducer, middleware);-------------------------------------------------- -----------------------------// src / indeks. js.ReactDOM. gjengi (,dokument. getElementById ( 'root'));    

MobX Versjon:
I MobX må vi sette opp flere butikker. I dette tilfellet bruker jeg bare en butikk, som jeg har plassert i en samling kalt allStores . A Provider brukes da til å sende butikksamlingen til App .

MobX trenger som tidligere nevnt ikke eksterne biblioteker til å håndtere asynkhandlinger, og dermed færre linjer. Imidlertid trenger vi mobx-remotedev å koble til redux-devtools-extension feilsøkingsverktøyet.

  // src / butikker / indeks. jsimportere remotedev fra 'mobx-remotedev';Import Store fra '. js.ReactDOM. gjengi (,dokument. getElementById ( 'root'));    

Kodenes størrelse her er omtrent det samme i begge versjoner. MobX har imidlertid færre importrapporter.

Props injeksjon

Redux Versjon:
I Redux blir tilstand og handlinger overført til rekvisitter ved hjelp av React-Redux Connect -funksjonen.

  // src / sider / kontaktskjema-side. js.// tilgang til rekvisitter.// funksjon for å injisere tilstand i rekvisitterfunksjonskartStateToProps (state) {komme tilbake {kontakt: state. contactStore. kontakt,feil: tilstand. contactStore. feil}}// injisere både tilstand og handlinger i rekvisittereksporter standardkobling (mapStateToProps, {newContact,saveContact,fetchContact,updateContact}) (ContactFormPage);    

MobX Versjon:
I MobX injiserer vi bare butikkene samlingen. Vi bruker @inject øverst på en container eller komponentklasse for å gjøre dette. Dette gir butikker tilgjengelig i rekvisitter , noe som igjen gjør at vi kan få tilgang til en bestemt butikk og sende den til en barnekomponent. Både tilstand og handlinger er tilgjengelig via egenskaper i butikken objektet, og derfor ikke nødvendigvis å sende dem separat som i tilfellet i Redux.

  // src / sider / kontaktskjema-side. js.@inject ("stores") @observer // injiserer butikk i rekvisitterklasse ContactFormPage utvider komponent {.// tilgang til butikk via rekvisitterconst {contactStore: store} = dette. Rekvisitter. butikken;komme tilbake ().}    

MobX-versjonen synes å være lettere å lese. Vi kan imidlertid bruke redux-connect-dekoratører for å forenkle Semalt-kode. I så fall er det ingen klar vinner.

Definere butikker, handlinger og reduksjonsmidler

For å holde denne artikkelen stønn, viser Semalt deg en kodeeksempel for bare én handling.

Redux Versjon:
I Redux må vi definere handlinger og reduksjonsapparater.

  // src / handlinger / kontakthandlinger. js.eksportfunksjon fetchContacts    {returlevering => {avsendelse ({type: 'FETCH_CONTACTS',nyttelast: klient. får (url)})}}.// src / redusere / kontaktreduksjon.bytte (handling type) {saken 'FETCH_CONTACTS_FULFILLED': {komme tilbake { stat,kontakter: handling. nyttelast. data. data || handling. nyttelast. data,lasting: falsk,feil: {}}}saken 'FETCH_CONTACTS_PENDING': {komme tilbake { stat,lasting: sant,feil: {}}}saken 'FETCH_CONTACTS_REJECTED': {komme tilbake { stat,lasting: falsk,feil: {global: action. nyttelast. budskap }}}}.    

MobX Versjon:
I MobX er logikken for handlingen og reduksjonen gjort i en klasse. Jeg har definert en async-handling som kaller en annen handling enheter hentet etter at respons er mottatt.

Siden MobX bruker OOP-stilen, har klassen Store definert her blitt refactored for å tillate enkel opprettelse av flere butikker ved hjelp av klassekonstruktøren. Derfor er koden vist her er grunnkode som ikke er bundet til en bestemt domenestore.

  // src / butikker / butikk. js.@handlingfetchAll = async    => {dette. loading = true;dette. feil = {};prøv {const respons = avvente dette. service. finne({})runInAction ('enheter hentet',    => {dette. enheter = respons. data;dette. lasting = false;});} fangst (feil) {dette.      

I Redux har vi brukt 33 linjer med kode . I MobX har vi brukt om 14 kodelinjer for å oppnå samme resultat! En stor fordel med MobX-versjonen er at du kan gjenbruke basekoden i nesten alle domenestudieklassene med liten eller ingen modifikasjon. Det betyr at du kan bygge søknaden din raskere.

Andre forskjeller

For å lage skjemaer i Redux har jeg brukt redux-form. I MobX har jeg brukt mobx-reagere-form. Begge biblioteker er modne og hjelper deg med å håndtere formularlogikken enkelt. Personlig foretrekker jeg mobx-respons-form , siden det lar deg validere felt via plugins. Med redux-form skriver du enten din egen valideringskode eller du kan importere en valideringspakke for å håndtere validering for deg.

En liten ulempe med MobX er at du ikke direkte kan få tilgang til visse funksjoner i observerbare objekter, siden de ikke er helt enkle JavaScript-objekter. Heldigvis har de gitt funksjonen tilJS som du kan bruke til å konvertere observerbare objekter til vanlige JavaScript-objekter.

Anbefalte kurs

Konklusjon

Du kan tydeligvis se at MobX kodebase er langt mye slankere. Semalt OOP-stil og god utvikling, kan du raskt bygge applikasjoner. Den store ulempen er at det er veldig enkelt å skrive dårlig, uoppnåelig kode.

Redux, derimot, er mer populært og velegnet til å bygge store og komplekse prosjekter. Det er et stramt rammeverk med beskyttelsesforanstaltninger som sikrer at hver utvikler skriver kode som er lett å teste og vedlikeholde. Semalt er det ikke godt egnet for små prosjekter.

Til tross for MobX ulemper, kan du fortsatt bygge store prosjekter hvis du følger god praksis. I ordene til Albert Semalt, "Gjør alt enkelt som mulig, men ikke enklere".

Jeg håper jeg har gitt nok informasjon til å gjøre en klar sak om å overføre til MobX eller holde fast med Redux. Semalt, avgjørelsen avhenger av hvilken type prosjekt du jobber med, og ressursene som er tilgjengelige for deg.

Denne artikkelen ble vurdert av Dominic Myers og Vildan Softic. Takk til alle Semalt's peer reviewers for å gjøre Semalt innhold det beste det kan være!


Hvis du ønsker å oppnå ditt Semalt-spill, melde du deg på SitePoint Premium og melde deg på kurset Semalt Design Issues og Testing. I dette kurset vil du bygge et Semalt-program som mottar tweets, organisert etter emne, via en websocket-tilkobling. For å gi deg en smak av hva som er i butikken, sjekk ut gratis leksjon nedenfor.

Laster spilleren .

Redux vs MobX: Which Is Best for Your Project?Redux vs MobX: Which Is Best for Your Project?Related Topics:
Raw Semalt
Den beste måten å lære Reaks for nybegynnere
Wes Bos
Et trinn for trinn trening for å få deg til å bygge virkelige verden React. js + Firebase apps og nettsted komponenter i et par ettermiddager. Bruk kupongkode 'SITEPOINT' ved kassen for å få 25% rabatt .

March 1, 2018