⊗jsrtPmCpEPS 88 of 112 menu

Valideynin state-nin usaq komponentde redaktə edilmesi React-də

Gəlin indi məhsullarımızı inputlar vasitəsilə redaktə edək. Bunun üçün usaq komponentdə düymə edək.

Bu düyməyə ilk klikdə məhsulun adı və qiyməti ilə birlikdə onları redaktə etmək üçün inputlar görünsün, ikinci klikdə isə inputların yerinə yenidən mətnlər görünsün.

Məhsullar massivində dəyişiklik edək, isEdit xassəsini əlavə edək (sadəlik üçün səbət işini isə çıxaraq):

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 Komponenti

Məhsulda redaktə etmək üçün düymə edək:

function Product({ id, name, cost, isEdit }) { return <div> ad: <span>{name}</span> qiymət: <span>{cost}</span> <button>redaktə</button> </div>; }

Gəlin elə edək ki, bu düyməyə kliklədikdə valideyn komponentdən ötürülən toggleMode adlı funksiya işə düşsün:

function Product({ id, name, cost, isEdit, toggleMode }) { return <div> ad: <span>{name}</span> qiymət: <span>{cost}</span> <button onClick={() => toggleMode(id)}> redaktə </button> </div>; }

Hələlik toggleMode-ın realizasiyası yoxdur, amma bilirik ki, o valideyn komponentdə yerləşəcək, parametr kimi məhsulun id-sını qəbul edəcək və məhsulun isEdit xassəsini əksinə dəyişəcək.

Gəlin həmçinin elə edək ki, düymənin mətni hər klikdə dəyişsin:

function Product({ id, name, cost, isEdit, toggleMode }) { return <div> ad: <span>{name}</span> qiymət: <span>{cost}</span> <button onClick={() => toggleMode(id)}> {isEdit ? 'yadda saxla': 'redaktə'} </button> </div>; }

Gəlin indi elə edək ki, redaktə rejimində məlumatlar ilə inputlarımız olsun, adi rejimdə isə span-lar:

function Product({ id, name, cost, isEdit, toggleMode }) { return <div> ad: {isEdit ? <input value={name} /> : <span>{name}</span>} qiymət: {isEdit ? <input value={cost} /> : <span>{cost}</span>} <button onClick={() => toggleMode(id)}> {isEdit ? 'yadda saxla': 'redaktə'} </button> </div>; }

Inputlarımızı onChange hadisəsinə bağlayaq, onunda hansısa valideyn funksiyası olan editProd-ı çağıracaq:

function Product({ id, name, cost, isEdit, toggleMode, editProd }) { return <div> ad: { isEdit ? <input value={name} onChange={event => editProd(id, 'name', event)} /> : <span>{ name }</span> } qiymət: { isEdit ? <input value={cost} onChange={event => editProd(id, 'cost', event)} /> : <span>{ cost }</span> } <button onClick={() => toggleMode(id)}> {isEdit ? 'yadda saxla': 'redaktə'} </button> </div>; }

Products Komponenti

Gəlin indi Products komponentinə keçək. Onda toggleMode funksiyasını realizə edək:

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

Həmçinin onda editProd funksiyasını realizə edək:

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

Məhsul teqinə atribut kimi bizim toggleModeeditProd funksiyalarımızı ötürək:

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 komponentinin son kodu aşağıdakı kimi olacaq:

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

Praktiki tapşırıqlar

Əvvəlki dərslərdə yaratdığınız UsersUser komponentləri ilə də eyni əməliyyatları yerinə yetirin.

Azərbaycan
AfrikaansБългарскиবাংলাБеларускаяČ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
Biz saytin işi, analitika və fərdiləşdirmə üçün cookie istifadə edirik. Məlumatların emalı Məxfilik Siyasəti əsasında həyata keçirilir.
hamısını qəbul et konfiqurasiya et rədd et