⊗jsrtPmCpEPS 88 of 112 menu

Ծնողի state-ի խմբագրում երեխա կոմպոնենտում React-ում

Այժմ եկեք խմբագրենք մեր ապրանքները օգտագործելով input դաշտեր: Դրա համար երեխա կոմպոնենտում ստեղծենք կոճակ:

Առաջին սեղմումով այս կոճակի վրա թող ապրանքի անվանման և գնի փոխարեն հայտնվեն input դաշտեր դրանց խմբագրման համար, իսկ երկրորդ սեղմումով input դաշտերի փոխարեն կրկին հայտնվեն տեքստեր:

Փոփոխություններ կատարենք ապրանքների զանգվածում, ավելացնելով isEdit հատկությունը (իսկ զամբյուղի հետ աշխատանքը պարզության համար հանենք):

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

Product կոմպոնենտ

Ապրանքի մեջ ստեղծենք խմբագրման կոճակ.

function Product({ id, name, cost, isEdit }) { return <div> անուն: <span>{name}</span> գին: <span>{cost}</span> <button>խմբագրել</button> </div>; }

Եկեք անենք, որ այս կոճակի սեղմումով կանչվի ինչ-որ ֆունկցիա toggleMode, որը փոխանցվել է ծնող կոմպոնենտից.

function Product({ id, name, cost, isEdit, toggleMode }) { return <div> անուն: <span>{name}</span> գին: <span>{cost}</span> <button onClick={() => toggleMode(id)}> խմբագրել </button> </div>; }

Մենք դեռ չունենք toggleMode-ի իրականացում, բայց գիտենք, որ այն կգտնվի ծնող կոմպոնենտում, պարամետրով կընդունի id ապրանքի և կփոխի isEdit հատկությունը ապրանքի հակառակ արժեքի:

Նաև եկեք անենք, որ կոճակի տեքստը փոխվի յուրաքանչյուր սեղմման ժամանակ.

function Product({ id, name, cost, isEdit, toggleMode }) { return <div> անուն: <span>{name}</span> գին: <span>{cost}</span> <button onClick={() => toggleMode(id)}> {isEdit ? 'պահպանել': 'խմբագրել'} </button> </div>; }

Եկեք այժմ անենք, որ խմբագրման ռեժիմում ունենանք input դաշտեր տվյալներով, իսկ սովորական ռեժիմում - span տարրեր.

function Product({ id, name, cost, isEdit, toggleMode }) { return <div> անուն: {isEdit ? <input value={name} /> : <span>{name}</span>} գին: {isEdit ? <input value={cost} /> : <span>{cost}</span>} <button onClick={() => toggleMode(id)}> {isEdit ? 'պահպանել': 'խմբագրել'} </button> </div>; }

Կապենք մեր input դաշտերը onChange իրադարձության հետ, որում կանչվի ինչ-որ ծնող ֆունկցիա editProd.

function Product({ id, name, cost, isEdit, toggleMode, editProd }) { return <div> անուն: { isEdit ? <input value={name} onChange={event => editProd(id, 'name', event)} /> : <span>{ name }</span> } գին: { isEdit ? <input value={cost} onChange={event => editProd(id, 'cost', event)} /> : <span>{ cost }</span> } <button onClick={() => toggleMode(id)}> {isEdit ? 'պահպանել': 'խմբագրել'} </button> </div>; }

Products կոմպոնենտ

Եկեք այժմ անցնենք Products կոմպոնենտին: Իրականացնենք դրա մեջ toggleMode ֆունկցիան.

function toggleMode(id) { setProds(prods.map(prod => { if (prod.id === id) { prod.isEdit = !prod.isEdit; } return prod; })); }

Նաև իրականացնենք դրա մեջ editProd ֆունկցիան.

function editProd(id, field, event) { setProds(prods.map(prod => { if (prod.id === id) { prod[field] = event.target.value; } return prod; })); }

Ապրանքի թեգին ատրիբուտներով փոխանցենք մեր toggleMode և editProd ֆունկցիաները.

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

Products կոմպոնենտի վերջնական կոդը կստացվի հետևյալը.

function Products() { const [prods, setProds] = useState(initProds); function toggleMode(id) { setProds(prods.map(prod => { if (prod.id === id) { prod.isEdit = !prod.isEdit; } return prod; })); } function editProd(id, field, event) { setProds(prods.map(prod => { if (prod.id === id) { prod[field] = event.target.value; } return prod; })); } const result = prods.map(prod => { return <Product key ={prod.id} id ={prod.id} name={prod.name} cost={prod.cost} isEdit={prod.isEdit} toggleMode={toggleMode} editProd={editProd} />; }); return <div> {result} </div>; }

Գործնական առաջադրանքներ

Կատարեք նմանատիպ գործողություններ ձեր կողմից նախորդ դասերում ստեղծված Users և User կոմպոնենտների հետ:

Հայերեն
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Մենք օգտագործում ենք cookie-ներ կայքի աշխատանքի, վերլուծության և անհատականացման համար։ Տվյալների մշակումը կատարվում է համաձայն Գաղտնիության քաղաքականության։
ընդունել բոլորը կարգավորել մերժել