⊗jsrxPmRDPAD 26 of 57 menu

Redux-те action объектісі үшін деректерді дайындау

Жақында біз сізбен createSlice функциясының action.payload құру кезінде бір аргумент күтетіні туралы әңгімелестік. Бір жағынан бұл оның қолданылуын жеңілдетсе, екінші жағынан action объектісінің мазмұнын дайындау үшін қосымша әрекеттерді талап етуі мүмкін.

Өнімдер қолданбамызды ашып, ондағы NewProductForm.jsx файлын ашайық. Мына код жолына назар аударыңыз:

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

Мұнда біз payload объектісін тура React компонентінде жинап, оны productAdded action-іне береміз. Ал егер бізге осындай action-ді бірнеше компоненттен жіберу керек болса немесе жинау логикасы күрделі болып шықса? Идея бойынша біздің компонентке осы action үшін payload-тегі объект қалай көрінетіні маңызды емес. Сонымен қатар бізді кодтың тұрақты қайталануы қанағаттандырмайды.

Бұл мәселелерді бізге тағы да атақты createSlice шешуге көмектесе алады, себебі редьюсерді жазу кезінде ол бізге әртүрлі логиканы жазуға, кездейсоқ сандарды генерациялауға және т.б. мүмкіндік беретін prepare callback-функциясын қолдануға мүмкіндік береді. Осындай жағдайда редьюсер өрісінің мәні мынадай объект түрінде ұсынылуы мүмкін:

{reducer, prepare}

productsSlice.js файлымызды ашып, productAdded редьюсерінің кодын өзгертейік. Енді бұл код фрагменті:

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

Біз оны мынаған өзгертеміз, онда reducer функциясы store-дегі стейтті жаңартумен айналысады, ал prepare - генерацияланған id және басқа деректеріміз бар payload объектісін қайтарады:

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

Енді біз id-ді компонентте емес, осында генерациялайтындықтан, nanoid-ті импортқа қосамыз:

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

Соңында NewProductForm.jsx файлында өзгерістер енгіземіз. Мына жолдың орнына:

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

Бізде қажетті деректерді жай ғана үтір арқылы беретін мынадай жол болады (осы файлда nanoid-ті импорттан алып тастауды ұмытпаңыз):

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

Қолданбаны іске қосып, содан кейін жаңа өнімді жасап, біз ештеңені бұзбағанымызға көз жеткізейік.

Студенттер қолданбаңызды ашыңыз. StudentsSlice.js файлында studentAdded редьюсеріңізді сабақта көрсетілгендей {reducer, prepare} объектісі түрінде болуы үшін қайта жазыңыз.

NewStudentForm.jsx файлына сабақта көрсетілгендей сәйкес өзгерістер енгізіңіз. Қолданбаны іске қосып, бәрі бұрынғыдай жұмыс істейтініне көз жеткізіңіз.

Қазақ
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართული한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Біз сайттың жұмысы, аналитика және персонализация үшін cookie файлдарын қолданамыз. Деректерді өңдеу Құпиялылық саясаты бойынша жүреді.
барлығын қабылдау баптау қабылдамау