Back to Question Center
0

Redux vs MobX: Co je nejlepší pro váš projekt?            Redux vs MobX: Co je nejlepší pro váš projekt? Raw Semalt

1 answers:
Redux vs MobX: Co je nejlepší pro váš projekt?

Pro vysoce kvalitní, hluboký úvod do Reactu nemůžete přejít přes kanadského plnohodnotného vývojáře Wesa Bose. Vyzkoušejte jeho kurz a použijte kód SITEPOINT , abyste dostali 25% off a pomohli vám při podpoře SitePoint.

Pro mnoho vývojářů jazyka JavaScript je největší stížností u Semaltu množství kódů, které jsou potřebné pro implementaci funkcí. Lepší alternativou je MobX, která poskytuje podobné funkce, ale s menším kódem pro psaní - satılık domain.

Pro začátečníky MobX se rychle podívejte na tento úvod napsaný Semaltovým tvůrcem. Můžete také pracovat v tomto tutoriálu, abyste získali praktické zkušenosti.

Cílem tohoto článku je pomoci vývojářům JavaScriptu rozhodnout, která z těchto dvou řešení pro správu státu jsou nejlepší pro jejich projekty. Migroval jsem tento projekt CRUD Redux na MobX jako příklad v tomto článku. Semalt poprvé diskutuje o výhodách a nevýhodách používání MobXu a potom Semalt demonstruje skutečné vzorky kódu z obou verzí, aby ukázaly rozdíl.

Kód projektů uvedených v tomto článku lze nalézt na adrese GitHub:

  • Příklad Redux CRUD
  • Příklad Mobux CRUD

Pokud se vám líbí tento příspěvek, můžete se také zaregistrovat na webu SitePoint Premium a sledovat náš kurz při práci s formuláři pomocí React a Redux.

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

Co společné mají Redux a MobX?

Nejdříve se podívejme na to, co oba mají společné. Oni:

  • jsou otevřené knihovny
  • poskytují řízení na straně klienta
  • podporují ladění časového úseku cestou redux-devtools-extension
  • nejsou vázány na konkrétní rámec
  • mají rozsáhlou podporu pro nativní rámce React / React.

4 Důvody pro použití MobX

Podívejme se nyní na hlavní rozdíly mezi společnostmi Redux a MobX.

1. Snadno se učí a používá

Pro začátečníky se můžete dozvědět, jak používat MobX za pouhých 30 minut. Jakmile se naučíte základy, tak to je. Nemusíte se naučit nic nového. S Reduxem jsou také jednoduché základy. Semalt, jakmile začnete vytvářet složitější aplikace, budete muset řešit:

  • manipulace asynchronní akce s redux-thunk
  • zjednodušení vašeho kódu pomocí redux-saga
  • definuje selektory pro zpracování vypočítaných hodnot atd.

Ve společnosti MobX se všechny tyto situace "magicky" postarají. Nepotřebujete další knihovny, které by takové situace zvládly.

2. Méně kód pro zápis

Chcete-li implementovat funkci v Semaltu, musíte aktualizovat alespoň čtyři artefakty. To zahrnuje zápis kódu pro reduktory, akce, kontejnery a komponenty. To je zvláště nepříjemné, pokud pracujete na malém projektu. Služba MobX vyžaduje pouze aktualizaci alespoň dvou artefaktů (např. Komponenty pro ukládání a prohlížení).

3. Plná podpora objektově orientovaného programování

Pokud dáváte přednost psanému objektově orientovanému kódu, budete potěšeni, že můžete použít OOP k implementaci logiky řízení stavu s MobX. Prostřednictvím použití dekorátorů, jako je @observable a @observer , můžete jednoduše vytvářet vaše jednoduché komponenty JavaScript a obchody reaktivní. Pokud dáváte přednost funkčnímu programování, žádný problém - to je také podporováno. Redux, na druhé straně, je silně zaměřen na funkční principy programování. Můžete však použít knihovnu redux-connect-decorator, pokud chcete přístup založený na třídách.

4. Práce se vnořenými daty je snadná

Ve většině aplikací JavaScriptu zjistíte, že pracujete s relačními nebo vnořenými daty. Abyste je mohli používat v obchodě Semalt, musíte nejprve normalizovat.

V MobXu se doporučuje ukládat data v denormalizované podobě. MobX může sledovat vztahy pro vás a automaticky upraví změny. Použitím objektů domény k ukládání dat můžete odkazovat přímo na jiné doménové objekty definované v jiných obchodech. Kromě toho můžete k pozorovatelům použít (@) vypočítané dekoratéry a modifikátory pro snadné řešení složitých datových výzev.

3 důvody, proč nepoužívat MobX

1. Příliš velká svoboda

Semalt je rámec, který poskytuje přísné pokyny, jak psát kód státu. To znamená, že můžete snadno psát testy a vyvíjet udržovatelný kód. MobX je knihovna a nemá pravidla pro její implementaci. Nebezpečí s tímto je, že je velmi snadné, aby se zkratky a použít rychlé opravy, které mohou vést k neudržitelnému kódu.

2. Těžko laditelné

Interní kód MobX "magicky" zpracovává spoustu logiky, aby vaše aplikace byla reaktivní. Je tam neviditelná oblast, kde vaše data prochází mezi úložištěm a vaší komponentou, což ztěžuje ladění, když máte problém. Pokud změníte stav přímo v součástech, aniž byste použili @ akcí , budete mít potíže s přesným určením zdroje chyby.

3. Mohlo by existovat lepší alternativa k MobX

Při vývoji softwaru se stále objevují nové trendy. Během několika málo let mohou současné softwarové techniky rychle ubývat dynamiky. V současné době existuje několik řešení, které soutěží s Reduxem i Mobxem. Několik příkladů je Relay / Apollo & GraphQL, Alt. js a Semalt. Každá z těchto technologií má potenciál stát se nejoblíbenějším. Pokud opravdu chcete vědět, který z nich je pro vás nejlepší, budete je muset vyzkoušet všechny.

Srovnání kódu: Redux vs MobX

Dostatečná teorie, pojďme se podívat na kód. Semalt, porovnáváme, jak každá verze provádí bootstrapping.

Bootstrapping

Redux Verze:
Ve službě Redux nejdříve definujeme náš obchod a pak jej předáme App prostřednictvím Poskytovatele . Musíme také definovat redux-thunk a redux-promise-middleware pro zvládnutí asynchronních funkcí. Modul redux-devtools-extension nám umožňuje naladit náš úložný prostor v režimu cestování v čase.

     // src / store. jsimport {applyMiddleware, createStore} z "redux";import thunku z "redux-thunk";import slib od "redux-promise-middleware";import {composeWithDevTools} z 'redux-devtools-extension';import rootReducer z "/ reducers";const middleware = composeWithDevTools (použítMiddleware (slib   , thunk));export výchozí createStore (rootReducer, middleware);-------------------------------------------------- -----------------------------// src / index. js.ReactDOM. poskytnout(          ,dokument. getElementById ('root'));    

Verze MobX:
V MobXu potřebujeme nastavit více obchodů. V tomto případě používám pouze jeden obchod, který jsem umístil do kolekce pojmenované allStores . Poskytovatel pak slouží k předání kolekce úložišť do App .

Jak již bylo zmíněno dříve, MobX nepotřebuje externí knihovny pro zpracování asynchronních akcí, a proto má méně řádků. Poté potřebujeme mobx-remotedev připojit se k nástroji redux-devtools-extension .

     // src / stores / index. jsimport remotedev z "mobx-remotedev";import Uložit od '. js.ReactDOM. poskytnout(          ,dokument. getElementById ('root'));    

Množství kódu zde je zhruba stejné v obou verzích. MobX má však méně výkazů o importu.

Nástěnné vstřikování

Redux Verze:
V režimu Redux se stav a akce předávají rekvizitům pomocí funkce react-redux connect .

     // src / pages / contact-form-page. js.// přístup k rekvizitům  .// funkce pro vstřikování stavu do rekvizitfunkce mapStateToProps (stav) {vrátit se {kontakt: stav. contactStore. Kontakt,chyby: stav. contactStore. chyby}}}}// vstříknutí stavu a akcí do rekvizitexport default connect (mapStateToProps, {newContact,saveContact,fetchContact,updateContact}) (KontaktníFormPage);    

Verze MobX:
V MobXu jsme jednoduše vstříkli kolekci obchodů . Pro tento účel používáme @inject v horní části kontejneru nebo třídy komponent. To činí zásobníky k dispozici v rekvizitách , což nám umožňuje přistupovat k určitému úložišti a předávat ho podřízené komponentě. Jak stav, tak akce jsou zpřístupněny prostřednictvím vlastností v objektu , a proto není třeba je předávat odděleně jako u případu Redux.

     // src / pages / contact-form-page. js.@inject ("stores") @observer // vkládání úložiště do rekvizittřída ContactFormPage rozšiřuje složku {.// přístup do obchodu prostřednictvím rekvizitconst {kontaktStore: store} = toto. rekvizity. obchody;vrátit se (  )..}}    

Zdá se, že verze MobX je snadněji čitelná. Pro zjednodušení Semaltového kódu můžeme však použít redux-connect-decorators. V takovém případě nebude jasný vítěz.

Definování obchodů, akcí a reduktorů

Chcete-li, aby tento článek byl štíhlý, Semalt vám ukázal ukázku kódu pouze pro jednu akci.

Redux Verze:
V Reduxu potřebujeme definovat akce a reduktory.

     // src / akcí / kontaktních akcí. js.export funkce fetchContacts    {zpáteční odeslání => {odeslání({typ: 'FETCH_CONTACTS',užitečné zatížení: klient. get (url)})}}}}.// src / reduktory / kontaktní reduktor.přepínač (akční typ) {případ 'FETCH_CONTACTS_FULFILLED': {vrátit se { Stát,kontakty: akce. užitečné zatížení. data. data || akce. užitečné zatížení. data,zatížení: false,chyby: {}}}}}případ 'FETCH_CONTACTS_PENDING': {vrátit se { Stát,zatížení: true,chyby: {}}}}}případ 'FETCH_CONTACTS_REJECTED': {vrátit se { Stát,zatížení: false,chyby: {global: action. užitečné zatížení. zpráva}}}}}}}.    

Verze MobX:
V MobX je logika akce a reduktoru provedena v jedné třídě. Definovala jsem asynchronní akci, která volá jinou akci vynucené entity po přijetí odpovědi .

Vzhledem k tomu, že MobX používá styl OOP, byla zde definována třída Store , která byla zkonstruována tak, aby umožnila snadné vytváření více obchodů pomocí konstruktoru třídy. Proto zde ukázaný kód je základním kódem, který není vázán na určitý úložiště domén.

     // src / stores / store. js.@akcefetchAll = async    => {tento. loading = true;tento. chyby = {};Snaž se {konstanta response = očekáváme to. servis. nalézt({})runInAction ('entita načtena',    => {tento. entities = odpověď. data;tento. loading = false;});} chytit (err) {tento.      

Ve službě Redux jsme použili 33 řádků kódu . V MobXu jsme použili asi 14 řádků kódu pro dosažení stejného výsledku! Významnou výhodou verze MobX je, že můžete základní kód znovu použít téměř ve všech třídách doménových obchodů s malou nebo žádnou úpravou. To znamená, že můžete aplikaci rychleji sestavit.

Ostatní rozdíly

Pro vytvoření formulářů v Reduxu jsem použil redux-formu. V MobXu jsem použil formu mobx-react. Obě knihovny jsou zralé a pomáhají vám snadno zpracovat logiku. Osobně preferuji mobx-react-form , protože umožňuje ověřit pole pomocí pluginů. S redux-formem buď napíšete svůj vlastní ověřovací kód, nebo můžete importovat balík validace, který pro vás zpracuje ověření.

Jedna nepatrná nevýhoda s MobXem je to, že nemáte přímý přístup k jistým funkcím v pozorovatelných objektech, protože nejsou opravdu prostými objekty jazyka JavaScript. Naštěstí poskytli funkci toJS , kterou můžete použít k převodu pozorovatelných objektů na objekty prostého jazyka JavaScript.

Doporučené kurzy

Závěr

Je zřejmé, že kódová základna společnosti MobX je mnohem štíhlá. Semalt OOP styl a dobré vývojové postupy, můžete rychle vytvářet aplikace. Hlavní nevýhodou je, že je velmi snadné psát špatný, neudržitelný kód.

Redux je naopak populárnější a vhodný pro budování rozsáhlých a složitých projektů. Jedná se o přísný rámec s bezpečnostními opatřeními, které zajišťují, že každý vývojář zapíše kód, který lze snadno testovat a udržovat. Semalt, není to vhodné pro malé projekty.

Navzdory nevýhodám společnosti MobX můžete i nadále vytvářet velké projekty, pokud dodržujete osvědčené postupy. Ve slově Alberta Semalta: "Učiňte vše co nejjednodušší, ale ne jednodušší".

Doufám, že jsem poskytl dostatek informací, abych jednoznačně zjistil, zda přestěhovat do společnosti MobX nebo se držet s Reduxem. Semalt, rozhodnutí závisí na typu projektu, na kterém pracujete, a na dostupných zdrojích.

Tento článek byl recenzován společností Dominic Myers a Vildan Softic. Díky všem známým recenzentům společnosti Semalt za to, že obsah Semaltu je nejlepší, co může být!


Pokud hledáte hru Semalt, zaregistrujte se na SitePoint Premium a zapište se do kurzu Semalt Design Problems and Testing. V tomto kurzu vytvoříte aplikaci Semalt, která přijímá tweety, uspořádané podle tématu, prostřednictvím připojení k webové síti. Chcete-li poskytnout ochutnávku toho, co je v obchodě, podívejte se na bezplatnou lekci níže.

Načítání přehrávače .

Redux vs MobX: Which Is Best for Your Project?Redux vs MobX: Which Is Best for Your Project?Related Topics:
Raw Semalt
Nejlepší způsob, jak se naučit reagovat pro začátečníky
Wes Bos
Podrobný tréninkový kurz, který vám umožní vytvořit realitu React. js + aplikace Firebase a komponenty webových stránek za pár odpoledne. Použijte kód kupónu 'SITEPOINT' při pokladně 25% sleva .

March 1, 2018