⊗jsrtPmCpMVS 90 of 112 menu

Mënyrat e punës përmes state-ve të komponentëve të pasardhës në React

Le të supozojmë se grupi ynë i produkteve tani duket kështu:

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'}, ];

Le t'i shfaqim këto produkte në formë tabele HTML. Në të njëjtën kohë, le të bëjmë që me klikim në çdo qelizë të tabelës, në atë qelizë të shfaqet një input për editim. Për zgjidhjen e problemit do të krijojmë 3 komponentë.

Komponenti Products do të ruajë state-in me produkte dhe do të përdorë komponentët Product për shfaqjen e produkteve. Komponenti Product nga ana tjetër do të përdorë gjithashtu komponentët ProductField për shfaqjen e një fushe të caktuar të produktit (emri, çmimi, kategoria).

Komponenti ProductField do të shfaqë ose tekstin e fushës, ose një input për editimin e saj. Në këtë rast, mënyra e editimit ose shfaqjes le të rregullohet nga state-i i këtij komponenti.

Kjo do të thotë se ne nuk do ta ruajmë mënyrën në state-in prind. Këtu do të ishte shumë e papërshtatshme, pasi do të na duhej të specifikonim mënyrën për çdo fushë produkti, e cila do ta kthente state-in tonë në diçka të tillë:

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}, ], ]

Megjithatë, ne nuk do të krijojmë një state të tillë, por do ta lëmë atë që ishte. Thjesht çdo instancë e komponentit ProductField me anë të state-it të vet do të rregullojë mënyrën: ose editim ose shfaqje.

Kështu do të ndodhë që komponenti prind do të ruajë state-in me të dhëna, ndërsa komponenti i pasardhës do t'i marrë këto të dhëna përmes props-ve dhe në të njëjtën kohë do të ketë state-in e vet për ndryshimin e mënyrës së vet.

Pra, le të implementojmë atë që u përshkrua.

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

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

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

Detyra praktike

Kryeni operacione të ngjashme me komponentët Users dhe User, të krijuar nga ju në mësimet e mëparshme.

Shqip
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ne përdorim cookie për funksionimin e sajtit, analizën dhe personalizimin. Përpunimi i të dhënave bëhet në përputhje me Politikën e Privatësisë.
prano të gjitha konfiguro refuzo