⊗jsrtPmCpChPS 87 of 112 menu

Reactda ota komponentning holatini bola komponentda o'zgartirish

Oldingi darsda ma'lumotlar bilan holat ota komponentda saqlanar edi, bola komponentlar esa bu ma'lumotlarni prop sifatida olar edilar.

Endi biz mahsulotlarimizni o'zgartirmoqchi bo'lsak. Keling, masalan, mahsulotimizni savatga qo'yadigan tugma yasaylik. Boshlash uchun keling, mahsulotlar massivimizga mahsulot savatda yoki yo'qligini ko'rsatadigan inCart maydonini qo'shamiz:

const initProds = [ {id: id(), name: 'product1', cost: 100, inCart: false}, {id: id(), name: 'product2', cost: 200, inCart: false}, {id: id(), name: 'product3', cost: 300, inCart: false}, ];

Products komponentida mahsulot tegi uchun yana bir inCart atributini qo'shamiz:

function Products() { const [prods, setProds] = useState(initProds); const items = prods.map(prod => { return <Product key ={prod.id} name ={prod.name} cost ={prod.cost} inCart={prod.inCart} />; }); return <div> {items} </div>; }

Keling, bola Product komponentida savat haqida ma'lumot chiqarishni va savatga qo'shish uchun tugma qilaylik:

function Product({ id, name, cost, inCart }) { return <div> name: <span>{name}</span>, cost: <span>{cost}</span>, <span>{inCart ? 'in cart' : 'not in cart'}</span> <button>to cart</button> </div>; }

Qo'shishni amalga oshiramiz

React qoidalariga ko'ra komponent o'z proplarini o'zgartirmasligi kerak. Bu degani bola komponent inCart propini o'zgartirib, o'zini savatga qo'ya olmaydi. Bu noto'g'ri.

To'g'ri usuli - ota komponentdan ma'lum bir mahsulotni savatga qo'shish uchun o'zining prods holatini o'zgartirishni so'rash bo'ladi.

Keling, buni qanday amalga oshirilishini ko'rib chiqaylik.

Ota komponentda addToCart funktsiyasini yasaymiz, u parametr sifatida mahsulotning id sini qabul qiladi va ushbu mahsulot uchun inCart xususiyatini true ga o'zgartiradi:

function addToCart(id) { setProds(prods.map(prod => { if (prod.id === id) { prod.inCart = true; } return prod; })); }

Mahsulot tegi uchun biz yaratgan funktsiyani uzatadigan atributni, shuningdek mahsulotning id sini uzatadigan atributni qo'shamiz:

const items = prods.map(prod => { return <Product key ={prod.id} id ={prod.id} name ={prod.name} cost ={prod.cost} inCart ={prod.inCart} addToCart={addToCart} />; });

Ko'rib turganingizdek, komponent proplariga nafaqat ma'lum bir ma'lumotlarni, balki funktsiyalarni ham uzatish mumkin.

Products klassining yakuniy kodi quyidagicha bo'ladi:

function Products() { const [prods, setProds] = useState(initProds); function addToCart(id) { setProds(prods.map(prod => { if (prod.id === id) { prod.inCart = true; } return prod; })); } const items = prods.map(prod => { return <Product key ={prod.id} id ={prod.id} name ={prod.name} cost ={prod.cost} inCart ={prod.inCart} addToCart={addToCart} />; }); return <div> {items} </div>; }

Endi bola klassida bizga addToCart funktsiyasi mavjud bo'ladi. Keling, ushbu funktsiyani tugma bosilganda chaqiramiz, unga parametr sifatida mahsulotning id sini uzatamiz:

function Product({ id, name, cost, inCart, addToCart }) { return <div> name: <span>{name}</span>, cost: <span>{cost}</span>, <span>{inCart ? 'in cart' : 'not in cart'}</span> <button onClick={() => addToCart(id)}>to cart</button> </div>; }

Ma'lum bo'ladiki, boladagi tugma bosilganda ota funktsiyasi chaqiriladi, u ota holatini o'zgartiradi. Ota holatining o'zgarishi qayta renderlanishni chaqiradi va o'zgartirilgan propni uzatib, bizning mahsulotimizni qayta chizadi.

Oldingi darsdan User komponentini oling. Undagi foydalanuvchini ban qilish uchun tugma paydo bo'lishini taminlang.

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