⊗jsrtPmCpChPS 87 of 112 menu

მშობელი კომპონენტის სტეიტის ცვლილება შვილობილ კომპონენტში React-ში

წინა გაკვეთილში ჩვენი მონაცემების სტეიტი ინახებოდა მშობელ კომპონენტში, ხოლო შვილობილი კომპონენტები იღებდნენ ამ მონაცემებს პროფების სახით.

ახლა კი დავუშვათ, რომ გვსურს ჩვენი პროდუქტების შეცვლა. მაგალითად, შევქმნათ ღილაკი, რომელიც ჩვენს პროდუქტს კალათაში დაამატებს. დასაწყისისთვის მოდით ჩვენს პროდუქტების მასივში დავამატოთ ველი inCart, რომელიც აჩვენებს არის თუ არა პროდუქტი კალათაში:

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 კომპონენტში პროდუქტის ტეგს დავუმატოთ კიდევ ერთი ატრიბუტი inCart:

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

მოდით შვილობილ Product კომპონენტში გავაკეთოთ ინფორმაციის გამოტანა კალათის შესახებ და ღილაკი კალათაში დასამატებლად:

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

დავამატოთ რეალიზაცია

React-ის წესების მიხედვით კომპონენტმა არ უნდა შეცვალოს საკუთარი პროფები. ეს ნიშნავს, რომ შვილობილ კომპონენტს არ შეუძლია თავად ჩაიდოს კალათაში, inCart პროფის შეცვლით. ეს არასწორია.

სწორი იქნება, თუ მშობელ კომპონენტს ვთხოვთ, შეცვალოს საკუთარი სტეიტი prods, განსაზღვრული პროდუქტის კალათაში დამატებით.

მოდით ვნახოთ, როგორ კეთდება ეს.

მშობელ კომპონენტში შევქმნათ ფუნქცია addToCart, რომელიც პარამეტრად იღებს პროდუქტის id-ს და ამ პროდუქტისთვის ცვლის inCart თვისებას true-ზე:

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

პროდუქტის ტეგს დავუმატოთ ატრიბუტი, რომელშიც გადავცემთ ჩვენს მიერ შექმნილ ფუნქციას, ასევე ატრიბუტი, რომელშიც გადავცემთ პროდუქტის id-ს:

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

როგორც ხედავთ, კომპონენტების პროფებში შესაძლებელია გადაცემა არა მხოლოდ რაიმე მონაცემების, არამედ ფუნქციებისაც.

Products კლასის საბოლოო კოდი მიიღებს შემდეგ სახეს:

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

ახლა შვილობილ კლასში ჩვენ გვექნება ხელმისაწვდომი ფუნქცია addToCart. გამოვიძახოთ ეს ფუნქცია ღილაკზე დაწკაპუნებისას, მისთვის პარამეტრად გადავცეთ პროდუქტის id-სი:

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

მიიღება ის, რომ შვილობილში ღილაკზე დაწკაპუნებისას გამოიძახება მშობლის ფუნქცია, რომელიც შეცვლის მშობლის სტეიტს. მშობელი სტეიტის შეცვლა გამოიწვევს რერენდერინგს და გადახატავს ჩვენს პროდუქტს, მას გადაეცემა შეცვლილი პროფი.

აიღეთ კომპონენტი User წინა გაკვეთილიდან. გახადეთ ისე, რომ მასში გამოჩნდეს ღილაკი მომხმარებლის დასაბანად.

ქართული
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
ვებსაიტის მუშაობის, ანალიტიკისა და პერსონალიზაციისთვის ვიყენებთ ქუქი-ფაილებს. მონაცემთა დამუშავება ხდება Კონფიდენციალურობის პოლიტიკის შესაბამისად.
ყველას მიღება პარამეტრები უარყოფა