⊗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 ? 'дар сабад' : 'дар сабад нест'}</span> <button>ба сабад</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 ? 'дар сабад' : 'дар сабад нест'}</span> <button onClick={() => addToCart(id)}>ба сабад</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
Мо барои коркарди сомона, таҳлил ва шахсӣ кардан аз cookie истифода мебарем. Коркарди маълумот мувофиқи Сиёсати махфият сурат мегирад.
ҳамаро қабул кардан танзим кардан рад кардан