⊗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ни бир нечта компонентлардан жўнатиш керак бўлса ёки ясаш логикаси мураккаб бўлса нима бўлади? Идея бўйича бизнинг компонентимиз 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 ни компонентда эмас, бу ерда яратаётганимиз sababil, келгинг nanoid ни импортга қўшайлик:

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

Ниҳоят, NewProductForm.jsx файлида ўзгартиришлар кирамиз. Бу сатр ўрнига:

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

Бизда шундай сатр бўлади, бунда биз жуда оддий ҳолда kerakli маълумотларимизни vergul orqali ўтказамиз (бу файлда nanoid ни импортдан олиб tashlashni унутмангиз):

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çeOʻzbekTiếng Việt
Биз веб-сайт ишлаши, таҳлил қилиш ва персоналлаштириш учун кукидан фойдаланамиз. Маълумотларни қайта ишлаш Махфийлик сиёсатига мувофиқ амалга оширилади.
ҳаммасини қабул қилиш мослаштириш рад этиш