Fundamental Elements of NgRx: Store, Actions, Reducers, Selectors, Effects
The store is the key element in the whole state management process. Se säilyttää tilaa ja helpottaa komponenttien ja tilan välistä vuorovaikutusta. Voit saada viittauksen storeen Angular-riippuvuusinjektiolla, kuten alla on esitetty.
constructor(private store: Store<AppState>) {}
Tätä store-viittausta voidaan myöhemmin käyttää kahteen ensisijaiseen toimintoon:
Toimintojen lähettämiseen varastoon store.dispatch(…)-metodin kautta, jotka puolestaan käynnistävät reduktorit ja efektit
Sovelluksen tilan hakemiseen selektoreiden kautta
Tilaobjektipuun rakenne
Esitettäköön, että sovelluksesi koostuu kahdesta ominaisuusmoduulista nimeltä Käyttäjä (User) ja Tuote (Product). Kumpikin näistä moduuleista käsittelee eri osia kokonaistilasta. Tuotetietoja ylläpidetään aina tilan products-osiossa. Käyttäjätietoja ylläpidetään aina tilan user-osiossa. Näitä osioita kutsutaan myös viipaleiksi.
Actionit
Action on käsky, jonka lähetät varastoon, valinnaisesti jonkinlaisen metatiedon (hyötykuorman) kanssa. Kauppa päättää action-tyypin perusteella, mitä operaatioita se suorittaa. Koodissa toiminto esitetään tavallisena JavaScript-oliona, jolla on kaksi pääattribuuttia, nimittäin type ja payload. payload on valinnainen attribuutti, jota vähentäjät käyttävät tilan muuttamiseen. Seuraava koodinpätkä ja kuva havainnollistavat tätä käsitettä.
{ "type": "Login Action", "payload": { userProfile: user }}
NgRx:n versiossa 8 on apufunktio nimeltä createAction, jonka avulla voidaan määritellä action-luojat (ei siis actionit vaan action-luojat). Seuraavassa on esimerkkikoodi tätä varten.
Voit sitten käyttää login action creator -funktiota (joka on funktio) actionien rakentamiseen ja niiden lähettämiseen varastoon alla esitetyllä tavalla. user on payload-objekti, jonka välität actioniin.
this.store.dispatch(login({user}));
Reduktiot
Reduktiot vastaavat tilan muokkaamisesta ja palauttavat uuden tila-objektin muutoksineen. Redusoijat ottavat vastaan kaksi parametria, nykyisen tilan ja toiminnon. Vastaanotetun toimintotyypin perusteella redusoijat suorittavat tiettyjä muutoksia nykyiseen tilaan ja tuottavat uuden tilan. Tätä konseptia esitellään alla olevassa kaaviossa.