⊗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ščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ние използваме бисквитки за работата на сайта, анализ и персонализация. Обработката на данни се извършва в съответствие с Политика за поверителност.
приемам всички настройки отхвърляне