⊗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>Маҳсулоти Навро Илова Кунед</h2>

Ва онро ба ин иваз кунем:

<h2>Маҳсулотро Таҳрир Кунед</h2>

Барномаи худро бо донишҷӯён кушоед. Файли EditStudentForm.jsx-ро эҷод кунед ба монанди 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 истифода мебарем. Коркарди маълумот мувофиқи Сиёсати махфият сурат мегирад.
ҳамаро қабул кардан танзим кардан рад кардан