⊗jsrtPmCpEPS 88 of 112 menu

Реактта ата-ана күйін бала компонентте өңдеу

Енді өнімдерді өңдеу үшін ендітірелерді қолданайық. Ол үшін бала компонентте батырма жасайық.

Осы батырмаға бірінші рет басқанда атауы мен бағасының орнына оларды өңдеуге арналған ендітірелер пайда болсын, ал екінші рет басқанда ендітірелердің орнына тағы да мәтіндер шықсын.

Өнімдер массивіне өзгеріс енгізейік, 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>; }

Енді өңдеу режимінде деректері бар ендітірелер, ал қарапайым режимде - спандар болуы үшін жасайық:

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

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