⊗jsrtPmFmsAIB 70 of 112 menu

Свързване на инпутни полета към масив в React

Нека в състоянието notes се съхранява масив:

function App() { const [notes, setNotes] = useState([1, 2, 3]); return <div> </div>; }

Нека имаме и помощна функция, която намира сумата на елементите на масива:

function getSum(arr) { let sum = 0; for (const elem of arr) { sum += +elem; } return sum; } function App() { ... }

Нека намерим и изведем сумата на елементите на нашия масив от състоянието, като използваме нашата помощна функция:

function App() { const [notes, setNotes] = useState([1, 2, 3]); return <div> {getSum(notes)} </div>; }

Нека сега направим три инпутни полета и в value на всяко поле запишем един от елементите на масива:

function App() { const [notes, setNotes] = useState([1, 2, 3]); return <div> <input value={notes[0]} /> <input value={notes[1]} /> <input value={notes[2]} /> {getSum(notes)} </div>; }

Нека сега добавим събитие onChange на нашите инпутни полета. При това ще направим една обща функция-обработчик на това събитие:

function App() { const [notes, setNotes] = useState([1, 2, 3]); function changeHandler(index, event) { // обща функция-обработчик } return <div> <input value={notes[0]} onChange={event => changeHandler(0, event)} /> <input value={notes[1]} onChange={event => changeHandler(1, event)} /> <input value={notes[2]} onChange={event => changeHandler(2, event)} /> {getSum(notes)} </div>; }

Както виждате, функцията changeHandler приема като първи параметър номера на този елемент от масива, който се редактира от даденото инпутно поле.

По този номер можем да заменим елемента от масива със съдържанието на инпутното поле.

Нека направим това:

function changeHandler(index, event) { setNotes([...notes.slice(0, index), event.target.value, ...notes.slice(index + 1)]); }

Сега ще можем да редактираме което и да е инпутно поле, като при това реактивно ще се променя масивът и съответно ще се преизчислява сумата на неговите елементи.

Нека съберем целия код заедно:

function App() { const [notes, setNotes] = useState([1, 2, 3]); function changeHandler(index, event) { setNotes([...notes.slice(0, index), event.target.value, ...notes.slice(index + 1)]); } return <div> <input value={notes[0]} onChange={event => changeHandler(0, event)} /> <input value={notes[1]} onChange={event => changeHandler(1, event)} /> <input value={notes[2]} onChange={event => changeHandler(2, event)} /> {getSum(notes)} </div>; }

Може да се направи така, че инпутните полета да се формират в цикъл:

function App() { const [notes, setNotes] = useState([1, 2, 3]); function changeHandler(index, event) { setNotes([...notes.slice(0, index), event.target.value, ...notes.slice(index + 1)]); } const result = notes.map((note, index) => { return <input key={index} value={note} onChange={event => changeHandler(index, event)} />; }); return <div> {result} {getSum(notes)} </div>; }

Даден е следният масив:

[1, 2, 3, 4, 5, 6, 7, 8, 9]

Изведете на екрана средноаритметичното на елементите на този масив. В цикъл направете инпутни полета за редактиране на елементите.

Български
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
Ние използваме бисквитки за работата на сайта, анализ и персонализация. Обработката на данни се извършва в съответствие с Политика за поверителност.
приемам всички настройки отхвърляне