⊗jsrxPmRDPAD 26 of 57 menu

Подготовка на податоци за објектот action во Redux

Неодамна разговаравме за тоа што функцијата createSlice очекува еден аргумент при создавањето на action.payload. Од една страна ова го поедноставува нејзиното користење, од друга страна може да бара дополнителни чекори за подготовка на содржината на објектот action.

Да ја отвориме нашата апликација со продукти, а во неа датотеката NewProductForm.jsx. Обрнете внимание на следниот ред код:

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

Овде го составуваме објектот payload директно во React компонентата и го пренесуваме во акцијата productAdded. Што ако ќе треба да ја испраќаме истата акција од повеќе компоненти или логиката за составување ќе испадне сложена? Во принцип, нашата компонента не би требало да ја интересира како изгледа објектот во payload за оваа акција. Згора на тоа, не ни одговара постојаното дуплирање на кодот.

Овие проблеми повторно може да ни помогне да ги реши нашиот познат createSlice, бидејќи при пишување на редјусерот тој ни овозможува да користиме callback-функција prepare, во која може да се пишува различна логика, да се генерираат случајни броеви и слично. Во тој случај вредноста за полето на редјусерот може да биде претставена во вид на следниот објект:

{reducer, prepare}

Да ја отвориме нашата датотека productsSlice.js и да го смениме кодот за редјусерот productAdded. Сега овој дел од кодот:

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

Ќе го смениме на следниов, во кој функцијата reducer ќе се занимава со ажурирање на состојбата во store, а prepare - ќе го враќа објектот payload со генерираниот id и нашите други податоци:

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šuMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ние користиме колачиња за работата на веб-страната, анализа и персонализација. Обработката на податоци се врши во согласност со Политиката за приватност.
прифати ги сите прилагоди одбиј