⊗jsrxPmRDPAD 26 of 57 menu

Reduxda action ob'ekti uchun ma'lumotlarni tayyorlash

Yaqinda biz siz bilan createSlice funktsiyasi action.payload yaratishda bitta argument kutishini muhokama qildik. Bir tomondan, bu uning foydalanishini soddalashtirsa, ikkinchi tomondan esa action ob'ekti tarkibini tayyorlash uchun qo'shimcha harakatlar talab qilishi mumkin.

Keling, mahsulotlar ilovamizni ochaylik, uning ichidagi NewProductForm.jsx faylini ochaylik. Quyidagi kod qatoriga e'tibor bering:

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

Bu yerda biz payload ob'ektini to'g'ridan-to'g'ri React komponentida yig'amiz va uni productAdded actioniga o'tkazamiz. Agar biz bir xil actionni bir nechta komponentlardan yuborishimiz kerak bo'lsa yoki yig'ish logikasi murakkab bo'lib qolsa-chi? Ideally, bizning komponentimiz ushbu action uchun payload dagi ob'ekt qanday ko'rinishiga alohida e'tibor bermasligi kerak. Bundan tashqari, biz doimiy kod takrorlanishidan norozi.

Bu muammolarni yana hal qilishga bizga yana mashhur createSlice yordam berishi mumkin, chunki reducer yozishda u bizga turli xil mantiq yozish mumkin bo'lgan prepare callback-funktsiyasidan foydalanishga imkon beradi, tasodifiy raqamlar generatsiya qilish va boshqalar. Bunday holda reducer maydoni qiymati quyidagi ob'ekt ko'rinishida taqdim etilishi mumkin:

{reducer, prepare}

Keling, productsSlice.js faylimizni ochaylik va productAdded reduceri uchun kodni o'zgartiraylik. Endi bu kod parchasi:

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

Biz uni quyidagiga o'zgartiramiz, unda reducer funktsiyasi storedagi stateni yangilash bilan shug'ullansin, prepare esa - generatsiya qilingan id va boshqa ma'lumotlarimiz bilan payload ob'ektini qaytarsin:

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

Endi biz id ni komponentda emas, buni yerda generatsiya qilamiz, shuning uchun keling, importga nanoid ni qo'shamiz:

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

Oxir oqibat, o'zgartirishlarni NewProductForm.jsx ga kiritamiz. Bu qator o'rniga:

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

Bizda shunday bo'ladi, unda biz shunchaki kerakli ma'lumotlarni vergul orqali o'tkazamiz (ushbu faylda importdan nanoid ni olib tashlashni unutmang):

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

Ilovani ishga tushiramiz, keyin yangi mahsulot yaratamiz va hech narsani buzganimizga ishonch hosil qilamiz.

Talabalar ilovangizni oching. StudentsSlice.js faylida studentAdded reduceringizni qayta yozing, u {reducer, prepare} ob'ekti ko'rinishida bo'lsin, darsda ko'rsatilgandek.

NewStudentForm.jsx faylida tegishli o'zgartirishlarni kiriting, darsda ko'rsatilgandek. Ilovani ishga tushiring va hammasi avvalgidek ishlashiga ishonch hosil qiling.

Oʻzbek
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекTiếng Việt
Biz sayt ishlashi, tahlil qilish va shaxsiylashtirish uchun cookie-fayllardan foydalanamiz. Ma'lumotlarni qayta ishlash Maxfiylik siyosatiga muvofiq amalga oshiriladi.
hammasini qabul qilish sozlash rad etish