Realax în viața reală

Realax în viața reală

Raportul relevă problemele reale pe care le veți întâlni la elaborarea unei aplicații: cum să gestionați efectele secundare, unde să puneți logica de afaceri și cum să testați aplicația. La începutul raportului - o scurtă introducere la Redak.







Realax în viața reală

Acesta este Dan Abramov. El are 27K abonați (e cool). Și anul trecut a făcut editările. Editorialul este o bibliotecă pentru organizarea arhitecturii unei aplicații.
  • Realax în viața reală

    Principalele diferențe dintre redacție și celelalte abordări sunt că 1) întreaga stare a aplicației este stocată într-un singur loc ...
  • Realax în viața reală

    Realax în viața reală

    După cum am spus, întreaga stare a aplicației este stocată într-un singur loc. Acest loc este numit "stop". De exemplu, pentru o aplicație care afișează un număr.
  • Realax în viața reală

    costul poate fi următorul.
  • Realax în viața reală

    Al doilea principiu este că starea aplicației nu poate fi modificată direct.
  • Realax în viața reală

    Realax în viața reală

    Al treilea principiu este că toate modificările sunt tratate de o funcție numită "résouzer" și că trebuie să fie curată. Din nou: o acțiune este un eveniment generat de funcția dispatch ().
  • Realax în viața reală

    O funcție pură este o funcție care întoarce întotdeauna același rezultat pentru aceeași valoare de intrare + nu schimbă nimic în afara ei înșiși. Sine este o funcție pură, deoarece pentru același unghi întoarce întotdeauna aceeași valoare. parseInt () este curat. $ .axx () nu este curat, deoarece la momente diferite poate reveni la diferite valori.
  • Realax în viața reală

    Prima funcție este curată, deoarece nu schimbă nimic în afară. Al doilea nu este, pentru că își schimbă parametrul, iar codul extern după apelarea acestei funcții funcționează deja cu alt parametru. Al treilea nu este, pentru că modifică de asemenea starea sistemului din exterior în sine (scoate ceva în consola).
  • Această funcție, care procesează acțiunile, este numită călăreț. Se ocupă de fiecare acțiune care are loc în aplicație. Funcția preia intrarea în starea curentă a aplicației și acțiunea care tocmai sa întâmplat, iar pentru fiecare tip de acțiune schimbă starea așa cum o consideră potrivită. Rețineți că starea de aici nu se schimbă direct. În schimb, se întoarce un nou stat la care Redaq însuși înlocuiește vechiul.
  • Realax în viața reală

    Realax în viața reală

    și în conformitate cu acestea cererea editorială este construită în conformitate cu această schemă. Întrebare: ce să faci cu efectele secundare?
  • Efectele secundare sunt atunci când modificați o variabilă globală, faceți o cerere către server, scrieți ceva în jurnal.
  • Realax în viața reală

    Problema este că în acest sistem nu există efecte secundare. Singurul loc în care se produc modificările este răscuratul și trebuie să fie o funcție pură.
  • Realax în viața reală

    Middleware vine la salvare. Midlveyr este între cod care dispatchit Jocuri de acțiune (de exemplu, generează evenimente) și redyuserom (de exemplu, o funcție pe care le va transforma într-o nouă stare), trece prin ea însăși toate acțiunile care decurg, le schimba (dacă se consideră necesar), și trimite următoarea - sau nu trimite . Caracteristica Middweir este că nu trebuie să fie o funcție pură - și, prin urmare, poate face efecte secundare cum ar fi cererile serverului sau orice altceva.






  • Realax în viața reală

    De fapt, middelweists pot fi multe, și apoi sunt organizate de-a lungul unui lanț.
  • Realax în viața reală

    De fapt, middweir-ul este doar o funcție care ia stack-ul curent, următorul în lanțul MIDLWEIR și acțiunea curentă, și face ceva despre el. Cuvintele de mijloc sunt conectate la crearea unei povesti. createStore și applyMiddleware sunt metode de editare. Nu-ți voi spune cum să-mi scriu middweir-ul, pentru că e prea greu să-ți creezi mediul pentru a lucra cu efecte secundare. În schimb, vom examina soluțiile deja existente. Apropo, cuvinte-cheie sunt create de comunitate și nu sunt incluse în livrarea editorilor.
  • Există o mulțime de metode pentru organizarea efectelor secundare. Știu doi. Primul este redux-thunk, cu care tu, atunci când creezi o aplicație cu editorul, se va ciocni cu exactitate. De ce este nevoie? Edițiile clasice pot funcționa numai cu acțiunea, care este reprezentată de obiecte simple.
  • Aplicarea reduc-thunk-ului MIDLWEIR este așa.
  • Realax în viața reală

    veți obține oportunitatea în loc de obiecte simple.
  • Realax în viața reală

    ... expediați funcția. Când pre-afișați funcția, redux-thunk o va apela și va trece la ea metoda de expediere, pe care o puteți apela atunci când aveți nevoie de ea. Astfel de funcții se numesc thunk.
  • Sau așa, dacă faceți o acțiune într-o funcție separată. Această eliminare, apropo, este șablonul standard din Editor, iar funcția care creează acțiunea se numește creator de acțiune.
  • Ce altceva poți să faci cu redux-thunk? Puteți expedia mai multe jocuri de acțiune într-un rând pentru a executa o deconectare și apoi a șterge oprirea.
  • Realax în viața reală

    Puteți expedia acțiuni pe cronometru pentru a determina utilizatorul să deschidă ferestre modale. Puteți face orice, deoarece avem dispatch - și chiar există o stare actuală a stivei, care este trecut de al doilea parametru. Redux-thunk este convenabil pentru efecte secundare simple. Când trebuie să organizați un flux complex de efecte secundare, devine inconfortabil. În acest caz, redux-saga vine la îndemână.
  • Ce este redux-saga? În general, saga este o abordare care a venit din backend. Redux-saga este o abordare alternativă a organizării efectelor secundare. În loc de a expedia funcții care sunt procesate de redux-thunk, creați o saga care colectează întreaga logică de procesare în sine. Spre deosebire de thunk, care este executat atunci când îi expediați, saga rulează la începutul aplicației și, ca atare, "lucrează în fundal". Saga ascultă toate acțiunile care expediază povestea și decide ce să facă cu ei. Și epopeile în redakse două avantaje în comparație cu thunk-uri: - Acestea vă permit să organizați secvențe complexe de efecte secundare - și acestea sunt foarte ușor testate Să vedem cum arată saga.
  • Realax în viața reală

    Amintiți-vă vechea autentificare cu thunk? Să o schimbăm pentru saga.
  • Realax în viața reală

    Ce se schimbă? - Funcția devine un generator - apelurile directe sunt înlocuite cu cele indirecte, prin apel (); dispatch () este înlocuit cu put () - Stilul de apel este schimbat în sincron (fără gloanțe) - și aceasta vă permite să scrieți cereri complexe asincrone
  • Vă puteți abona la acțiune în două moduri. Prima este simplă: înfășurăm saga și cerem redux-saga să o numească de fiecare dată când are loc acțiunea LOGIN_REQUESTED.
  • A doua cale este mai complicată. Am pus codul saga într-o buclă infinită și l-am plasat la începutul preluării randamentului ('LOGIN_REQUESTED'). Când saga începe executarea, execuția va ajunge la această linie, se va opri și nu va continua până când nu va fi generată acțiunea LOGIN_REQUESTED.
  • Realax în viața reală

    A doua metodă vă permite să prindeți câteva jocuri de acțiune. Aici, codul în locul elipsei va fi executat numai atunci când se produce ANOTHER_ACTION. care a fost precedată de LOGIN_REQUESTED.
  • Deci s-au stabilit sageți. Acestea sunt executate imediat după apelarea createStore (). Exemplu de cod cu sagas
  • Realax în viața reală

    Cu logica de afaceri, totul este simplu.
  • Logica de afaceri - Middlewords! De ce? - Efecte secundare, care aparțin majorității logicii de afaceri (thunk-ah sau sagas), și așa vor fi în middlewords. Este logic să se mute la logica de afaceri rămase - Midlveyry au acces la toate redyusery orb și - doar o parte - Pot dispatchit câteva jocuri de acțiune Mai multe link-uri: Întrebare: În cazul în care pentru a pune logica de afaceri / validări? Recomandări pentru cele mai bune practici privind creatorii de acțiuni, reductorii și selectorii
  • Realax în viața reală

    Adică, în această schemă, logica de afaceri ar trebui să fie în acest bloc negru.
  • Exemplu de cod de la unul dintre cele mai bune proiecte open source din editor. Reduceri în el sunt cât mai simple posibil, ...
  • și acțiunile-creatorii sunt complexe și conțin toată logica.
  • Ce puteți testa în general? Testul obișnuit de acțiune-kriyetory este ușor. Asynchronous - este dificil, deoarece acestea returnează funcții și este dificil să se verifice dacă funcția corectă a revenit. Reductoarele sunt ușoare. (Cum sa testezi: action-creatori., Asincron action-creators.
  • Voi vorbi despre cum să testați poveștile. Saga-urile sunt foarte ușor de testat.
  • Ține minte acest diapozitiv? Cele mai multe buzz sunt în aceste funcții dedicate.
  • apelul ($. ajax) nu numește $ .axax direct, dar generează o descriere a apelului declarativ ca un simplu obiect JS. Datorită acestui fapt pentru testare este suficient să comparăm două obiecte prin intermediul deepEqual.
  • Iată o astfel de saga ...
  • ... este foarte ușor de testat. Rețineți că pentru a emula răspunsul serverului, îl trimitem doar la generator. Și pentru a verifica dacă generatorul sună la $ .ax și o face o cerere către server, este foarte simplu, deoarece generatorul returnează un obiect cu o descriere a apelului.
  • Asta este, din nou: declarăm o cerere AJAX ...
  • ... și comparați doar declarația. În mod similar, cu generarea de jocuri de acțiune. Dacă vrem să verificăm dacă saga va genera acțiunea LOGIN_SUCCESS. comparăm doar declarația că generatorul a revenit cu cel așteptat.
  • Realax în viața reală

    Realax în viața reală

    Realax în viața reală

    Realax în viața reală







    Articole similare

    Trimiteți-le prietenilor: