⊗jsrtPmFmsAIB 70 of 112 menu

Inputs binden aan een array in React

Stel dat in de state notes een array wordt opgeslagen:

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

Stel dat we ook een hulpfunctie hebben, die de som van de array-elementen vindt:

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

Laten we de som van de elementen van onze array uit de state vinden en weergeven, door gebruik te maken van onze hulpfunctie:

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

Laten we nu drie inputs maken en in value van elke input een van de array-elementen zetten:

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

Laten we nu een onChange gebeurtenis toevoegen aan onze inputs. Laten we hierbij één algemene handler-functie voor deze gebeurtenis maken:

function App() { const [notes, setNotes] = useState([1, 2, 3]); function changeHandler(index, event) { // algemene handler-functie } 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>; }

Zoals je ziet, accepteert de functie changeHandler als eerste parameter het nummer van dat array-element dat door deze input wordt bewerkt.

Aan de hand van dit nummer kunnen we het element van de array vervangen door de inhoud van de input.

Laten we dit doen:

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

Nu kan elke input worden bewerkt, waarbij de array reactief zal veranderen en dienovereenkomstig de som van zijn elementen opnieuw wordt berekend.

Laten we al onze code samenvoegen:

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

Het is mogelijk om te regelen dat de inputs in een lus worden gegenereerd:

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

Gegeven de volgende array:

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

Toon het rekenkundig gemiddelde van de elementen van deze array op het scherm. Maak in een lus inputs voor het bewerken van de elementen.

Nederlands
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wij gebruiken cookies voor de werking van de site, analyse en personalisatie. De verwerking van gegevens gebeurt volgens het Privacybeleid.
alles accepteren aanpassen weigeren