⊗jsrxPmATER 48 of 57 menu

Papildu reducers Redux

Atversim mūsu lietotni ar produktiem, un tajā failu productsSlice.js. Iespējams, jūs esat pamanījuši, ka mēs izveidojām thunk fetchProducts kā atsevišķu funkciju? Mēs tā izdarījām, jo createSlice neatbalsta thunk definēšanu. Kā tad mums šajā gadījumā likt slaisa products reduceri reaģēt uz action, kuri ir definēti ārpus products? Galu galā mums tieši jāapstrādā action, kurus nosūta thunks fetchProducts.

Šādiem gadījumiem createSlice ir īpašība extraReducers, kas ļauj pievienot papildu reducerus, kuri savukārt apstrādās action, kuri nav definēti šajā slaisī.

Tagad funkcijas createSlice ķermenī pēc īpašības reducers ar visiem reduceriem pievienosim vēl vienu metodi extraReducers:

extraReducers() {},

Šai metodei mums jāpadod objekts builder, kuram ir metodes, ar kuru palīdzību var pievienot papildu reducerus:

extraReducers(builder) {},

Mēs izmantosim vienu no builder metodēm - addCase, kas pirmo parametru pieņem action creator, bet otro - reducer. Viens no action, ko mums nosūtīs fetchProducts pie pieprasījuma, ir fetchProducts.pending, kas norāda mums, ka pieprasījums ir nosūtīts. Šajā gadījumā mainīsim statusu uz 'in progress' (īsāk tas bija 'idle'):

extraReducers(builder) { builder.addCase(fetchProducts.pending, (state) => { state.status = 'in progress' }) },

Tagad apstrādāsim action, kas tiks nosūtīts gadījumā, ja pieprasījums ir veiksmīgs. Šeit mēs mainīsim ne tikai statusu stetā uz 'success', bet arī paņemsim produktus slaisī products no payload action. Lai savāktu visus produktus, mums būs vajadzīga metode concat:

extraReducers(builder) { builder .addCase(fetchProducts.pending, (state) => { state.status = 'in progress' }) .addCase(fetchProducts.fulfilled, (state, action) => { state.status = 'success' state.products = state.products.concat(action.payload) }) },

Gadījumā, ja pieprasījums neizdodas, mēs mainīsim statusu uz 'fail' un ierakstīsim stetā kļūdas ziņojumu:

.addCase(fetchProducts.rejected, (state, action) => { state.status = 'fail' state.error = action.error.message })

Ja mēs tagad palaidīsim mūsu lietotni un izvēlnē noklikšķināsim uz 'Products', tad pēc pāris sekundēm (atceraties par aizkavi, ko mēs iestatījām serverī?) ieraudzīsim sarakstu ar produktiem.

Tieši tāpat mēs ieraudzīsim izmaiņas arī Redux DevTools. Tagad mūsu produkti parādīsies stetā (apskatiet cilni 'State'), ja jūs noklikšķinājāt uz action products/fetchProducts/fulfilled. Tur parādīsies arī jaunais statuss 'success'. Tagad noklikšķiniet uz action products/fetchProducts/pending un apskatiet, kā tagad atšķiras cilne 'State'.

Vienīgā nepatīkamā situācija, kas jums varētu gadīties (es par to runāju iepriekšējā nodarbībā) - ir datu pieprasījuma dublēšanās. Rezultātā mums sarakstā būs ne 8, bet veseli 16 produkti un kritiskie brīdinājumi izstrādātāja konsolē. Tiksim gudriem ar to nākamajā nodarbībā.

Atveriet savu lietotni ar studentiem. Atveriet tajā failu studentsSlice.js. Funkcijas createSlice ķermenī pēc īpašības reducers pievienojiet īpašību extraReducers. Piedodiet metodei extraReducers builder.

Ar builder.addCase metodes palīdzību pievienojiet apstrādi action pending, fulfilled un rejected, kurus nosūta fetchStudents, pieprasot datus, kā parādīts nodarbībā.

Latviešu
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mēs izmantojam sīkdatnes, lai nodrošinātu vietnes darbību, analīti un personalizāciju. Datu apstrāde notiek saskaņā ar Konfidencialitātes politiku.
pieņemt visus iestatīt noraidīt