⊗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हिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Мо барои коркарди сомона, таҳлил ва шахсӣ кардан аз cookie истифода мебарем. Коркарди маълумот мувофиқи Сиёсати махфият сурат мегирад.
ҳамаро қабул кардан танзим кардан рад кардан