⊗jsrxPmRDEF 24 of 57 menu

Форма за уређивање података у Redux

Сада имамо редјусер за промену података у store-у. На овој лекцији ћемо направити форму, помоћу које ћемо моћи да уређујемо податке производа.

Хајде да отворимо нашу апликацију са производима и направимо у фолдеру products фајл EditProductForm.jsx. Креирање компоненте EditProductForm ће бити аналогно NewProductForm, осим неких разлика, на којима ћемо се заустављати. Зато скопирајте цео код NewProductForm.jsx и налепите га у направљени фајл EditProductForm.jsx. Сада кренимо редом.

Уклоните из импорта nanoid, овде нам није потребно да генеришемо id. Замените импорт productAdded са productUpdated, јер овде ћемо користити action за ажурирање, а не за додавање производа.

Затим ћемо променити назив функције наше компоненте са NewProductForm на EditProductForm.

Пре него што поставимо локалне стањеве у функцији EditProductForm за name, desc, price и amount, хајде да убацимо још неколико линија кода. Као што смо раније поменули, овде нам није потребно да генеришемо id. Сада је наш задатак да га добијемо из података производа који се мења. Већ смо то радили приликом креирања посебне странице за продукт. Дакле, добијемо id помоћу кука useParams, а затим пронађемо потребан нам продукт, користећи кук useSelector (не заборавите да импортујете оба кука на почетку фајла):

let params = useParams() const { productId } = params const product = useSelector((state) => state.products.find((product) => product.id === productId) )

Након тога променимо блок са декларацијом локалних стања. Сада нам је потребно да као почетну вредност поставимо податке производа добијене из store-а. Ево како ће изгледати први стејт, преправљате три преостала сами:

const [name, setName] = useState(product.name)

Након доделе променљиве за useDispatch хајде да убацимо још једну линију кода овог пута за кук useNavigate. Користићемо га за повратак на страницу са продуктом, када корисник сачува промене унесене у форму:

const navigate = useNavigate()

Такође импортујте овај кук на почетку фајла:

import { useNavigate, useParams } from 'react-router-dom'

Затим иду руковаоци за поља за унос. А после њих нам је потребно да исправимо функцију onSaveProductClick. Сада у њој при клику ћемо слати екшен productUpdated са добијеним id и измењеним подацима у облику објекта. Затим додамо наш navigate, за прелазак на страницу измењеног производа:

const onSaveProductClick = () => { if (name && desc && price && amount) { dispatch( productUpdated({ id: productId, name, desc, price, amount, }) ); navigate(`/products/${productId}`); } }

Остало је само да у нашој враћеној верстици пронађемо линију:

<h2>Add a New Product</h2>

И заменимо је са:

<h2>Edit Product</h2>

Отворите вашу апликацију са студентима. Направите фајл EditStudentForm.jsx по аналогији са NewStudentForm.jsx. Унесите у њега измене, као што је приказано у лекцији.

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