⊗jsrtPmCpChPS 87 of 112 menu

Valideynin state-nin usaq komponentde deyishdirilmesi React-de

Evvelki dersde bizim data ile state valideyn komponentde saxlanilirdi, ve usaq komponentler bu datani props kimi alirdi.

Indi isteyek ki, mehsullarimizi deyishdirek. Gelin meselen, mehsulu sebetə qoyan bir duyme edek. Evvelce gelin mehsullarimizin oldugu massivə inCart sahesini elave edek, hansi ki, mehsulun sebetde olub-olmadigini gostersin:

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 komponentinde mehsulun oldugu teqe bir atribut inCart elave edek:

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>; }

Gelin usaq komponent Product-da sebet haqqinda melumat çixishi ve sebete elave etmek uchun duyme edek:

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>; }

Elave etmeni reallashtiraq

React-in qaydalarina gore komponent oz props-larini deyishdirmemelidir. Bu omenaya gelir ki, usaq komponent ozunu sebete qoya bilmez, inCart props-unu deyishdirmekle. Bu duzgun deyil.

Duzgun olan, valideyn komponentden onun prods state-ni deyishdirmesini isteyerek, muəyyən bir mehsulu sebete qoymaqdir.

Gelin bu necə edilir baxaq.

Valideyn komponentde addToCart funksiyasi edek, hansi ki, parametr kimi mehsulun id-sini qebul edir ve bu mehsul uchun inCart xususiyyetini true olaraq deyishdirir:

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

Mehsulun oldugu teqe bir atribut elave edek, hansina ki, etdiyimiz funksiyani oturecek, hemcinin id mehsulunu oturecek bir atribut da elave edek:

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

Gorduyunuz kimi, komponentlerin props-larina yalniz bir data deyil, hem de funksiyalar oturmek olar.

Products sinfinin yekun kodu ashagidaki kimi olacaq:

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>; }

Indi usaq sinifde bizim addToCart funksiyasi elcatandi. Bu funksiyani duymenin kliki ile çağıraq, ona parametr kimi mehsulun id-sini oturerek:

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>; }

Beləliklə, usaqdakı duymə klik edende valideynin funksiyasi çağırılacaq, hansi ki, valideynin state-ni deyishdirecek. Valideyn state-inin deyishmesi yenidən renderi tetikleyecek ve mehsulumuzu deyishdirilmish props oturerek yeniden çizecek.

Evvelki dersden User komponentini goturun. Elə edin ki, orada istifadeçini ban etmek uchun bir duyme peyda olsun.

Azərbaycan
AfrikaansБългарскиবাংলাБеларускаяČ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
Biz saytin işi, analitika və fərdiləşdirmə üçün cookie istifadə edirik. Məlumatların emalı Məxfilik Siyasəti əsasında həyata keçirilir.
hamısını qəbul et konfiqurasiya et rədd et