⊗jsrtPmCpMVS 90 of 112 menu

React-ի ժառանգ կոմպոնենտների ստեյթների միջոցով աշխատանքի ռեժիմներ

Ենթադրենք, մեր արտադրանքների զանգվածը այժմ ունի հետևյալ տեսքը՝

const initProds = [ {id: id(), name: 'prod1', cost: 'cost1', catg: 'catg1'}, {id: id(), name: 'prod2', cost: 'cost2', catg: 'catg2'}, {id: id(), name: 'prod3', cost: 'cost3', catg: 'catg3'}, ];

Եկեք արտադրանքները ցուցադրենք HTML աղյուսակի տեսքով: Ընդ որում, եկեք այնպես անենք, որ աղյուսակի ցանկացած բջիջի վրա կտտացնելիս այդ բջիջում հայտնվի ինպուտ խմբագրման համար: Խնդիրը լուծելու համար կստեղծենք 3 կոմպոնենտ:

Products կոմպոնենտը կպահի ստեյթը արտադրանքների հետ և կօգտագործի Product կոմպոնենտները արտադրանքները ցուցադրելու համար: Product կոմպոնենտը իր հերթին նաև կօգտագործի ProductField կոմպոնենտները արտադրանքի կոնկրետ դաշտը ցուցադրելու համար (անվանում, գին, կատեգորիա):

ProductField կոմպոնենտը կցուցադրի կամ դաշտի տեքստը, կամ էլ դրա խմբագրման համար նախատեսված ինպուտը: Ընդ որում, թող խմբագրման ռեժիմը կամ ցուցադրման ռեժիմը կարգավորվի այս կոմպոնենտի սեփական ստեյթով:

Այսինքն՝ մենք ռեժիմը չենք պահելու ծնողական ստեյթում: Այնտեղ դա շատ անհարմար կլիներ, քանի որ մեզ պետք կլիներ նշել ռեժիմը արտադրանքի յուրաքանչյուր դաշտի համար, ինչը մեր ստեյթը կվերածեր մոտավորապես հետևյալի՝

const initProds = [ [ {field: 'name', value: 'prod1', isEdit: false}, {field: 'cost', value: 'cost1', isEdit: false}, {field: 'catg', value: 'catg1', isEdit: false}, ], [ {field: 'name', value: 'prod2', isEdit: false}, {field: 'cost', value: 'cost2', isEdit: false}, {field: 'catg', value: 'catg2', isEdit: false}, ], [ {field: 'name', value: 'prod3', isEdit: false}, {field: 'cost', value: 'cost3', isEdit: false}, {field: 'catg', value: 'catg3', isEdit: false}, ], ]

Սակայն մենք այդպիսի ստեյթ չենք պատրաստի, այլ կթողնենք այն, որը եղել է: Պարզապես ProductField կոմպոնենտի յուրաքանչյուր օրինակ իր ստեյթի միջոցով կկարգավորի ռեժիմը՝ խմբագրում կամ ցուցադրում:

Այսպիսով կստացվի, որ ծնողական կոմպոնենտը կպահի տվյալների ստեյթը, իսկ մեր թոռան տեղի կոմպոնենտը կստանա այդ տվյալները պրոպսերի միջոցով և ընդ որում կունենա սեփական ստեյթ՝ իր ռեժիմը փոխելու համար:

Այսպիսով, եկեք իրականացնենք նկարագրվածը:

Products կոմպոնենտը

function Products() { const [prods, setProds] = useState(initProds); function changeField(id, field, event) { setProds(prods.map(prod => { if (prod.id === id) { prod[field] = event.target.value; } return prod; })); } const rows = prods.map(prod => { return <Product key ={prod.id} id ={prod.id} name={prod.name} cost={prod.cost} catg={prod.catg} changeField={changeField} />; }); return <div> <table> <tbody> {rows} </tbody> </table> </div>; }

Product կոմպոնենտը

function Product({ id, name, cost, catg, changeField }) { return <tr> <ProductField id={id} text={name} type="name" changeField={changeField} /> <ProductField id={id} text={cost} type="cost" changeField={changeField} /> <ProductField id={id} text={catg} type="catg" changeField={changeField} /> </tr>; }

ProductField կոմպոնենտը

function ProductField({ id, text, type, changeField }) { const [isEdit, setIsEdit] = useState(false); return <td> { isEdit ? <input value={text} onChange={event => changeField(id, type, event)} onBlur={() => setIsEdit(false)} /> : <span onClick={() => setIsEdit(true)}>{text}</span> } </td>; }

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

Կատարեք նմանատիպ գործողություններ 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-ներ կայքի աշխատանքի, վերլուծության և անհատականացման համար։ Տվյալների մշակումը կատարվում է համաձայն Գաղտնիության քաղաքականության։
ընդունել բոլորը կարգավորել մերժել