⊗jsrxPmRDPAD 26 of 57 menu

Veiksmo (action) objekto duomenų paruošimas Redux

Neseniai kalbėjome apie tai, kad funkcija createSlice tikisi vieno argumento kuriant action.payload. Viena vertus, tai supaprastina jos naudojimą, kita vertus, gali prireikti papildomų veiksmų, norint paruošti veiksmo objekto turinį.

Atidarykime mūsų produktų aplikaciją, o joje failą NewProductForm.jsx. Atkreipkite dėmesį į šią kodo eilutę:

dispatch(productAdded({ id: nanoid(), name, desc, price, amount }))

Čia mes sudarome payload objektą tiesiogiai React komponente ir perduodame jį veiksmui productAdded. O kas, jei mums teks siųsti tą patį veiksmą iš kelių komponentų arba logika sudaryti pasirodys sudėtinga? Idealiu atveju mūsų komponentui turėtų būti nesvarbu, kaip atrodo objektas payload šiam veiksmui. Be to, mums nepatinka nuolatinis kodo dubliavimas.

Šias problemas mums vėl gali padėti išspręsti mūsų garsusis createSlice, kadangi rašant reducerį jis leidžia mums naudoti atgalinio ryšio (callback) funkciją prepare, kurioje galima rašyti įvairią logiką, generuoti atsitiktinius skaičius ir pan. Tokiu atveju reductoraus lauko reikšmė gali būti pateikta kaip toks objektas:

{reducer, prepare}

Atidarykime mūsų failą productsSlice.js ir pakeiskime reductoraus productAdded kodą. Dabar šis kodo gabaliukas:

productAdded(state, action) { state.push(action.payload) },

Mes pakeisime jį šiuo, kuriame funkcija reducer užsiims store būsenos atnaujinimu, o prepare - grąžins objektą payload su sugeneruotu id ir kitais mūsų duomenimis:

productAdded: { reducer(state, action) { state.push(action.payload) }, prepare(name, desc, price, amount) { return { payload: { id: nanoid(), name, desc, price, amount, }, } }, },

Kadangi dabar mes generuosime id čia, o ne komponente, pridėkime nanoid į importą:

import { createSlice, nanoid } from '@reduxjs/toolkit'

Galiausiai atlikime pakeitimus NewProductForm.jsx. Vietoj eilutės:

dispatch(productAdded({ id: nanoid(), name, desc, price, amount }))

Mes turėsime tokią, kurioje mes tiesiog per kablelį perduosime mums reikalingus duomenis (nepamirškite šiame faile pašalinti nanoid iš importo):

dispatch(productAdded(name, desc, price, amount))

Paleiskime aplikaciją, tada sukurkime naują produktą ir įsitikinkime, kad nieko nesugadinome.

Atidarykite savo studentų aplikaciją. Faile StudentsSlice.js perrašykite savo reductorų studentAdded taip, kad jis būtų objekto {reducer, prepare} pavidalu, kaip parodyta pamokoje.

Atlikite atitinkamus pakeitimus faile NewStudentForm.jsx, kaip parodyta pamokoje. Paleiskite aplikaciją ir įsitikinkite, kad viskas veikia taip pat, kaip ir anksčiau.

Lietuvių
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mes naudojame slapukus svetainės veikimui, analizei ir personalizavimui. Duomenų apdorojimas vyksta pagal Privatumo politiką.
priimti visus nustatyti atšaukti