⊗jsrtPmFmsII 56 of 112 menu

Arbejde med inputs i React

Arbejde med inputs i React foregår ved hjælp af states. Hver input tildeles sin egen state, som indeholder inputets value.

Lad os se på et eksempel. Antag, at vi har et inputfelt:

function App() { return <div> <input /> </div>; }

Antag også, at vi har en state:

function App() { const [value, setValue] = useState('text'); return <div> <input /> </div>; }

Lad os binde vores state til inputfeltets value attribut:

function App() { const [value, setValue] = useState('text'); return <div> <input value={value} /> </div>; }

I dette tilfælde vil det betyde, at når staten ændres, vil inputfeltets tekst også reaktivt ændres.

Dette giver dog en interessant bivirkning: nu er det umuligt at ændre teksten i inputfeltet, når koden køres i browseren! Hvorfor: fordi når tekst indtastes i inputfeltet, ændres statens value ikke, og derfor skal teksten i inputfeltet heller ikke ændres.

Prøv det selv. Kopier min kode og kør den hos dig selv. Prøv at ændre teksten i inputfeltet - du vil ikke kunne gøre det. Åbn browserens konsol - du vil se en advarsel fra React der. Denne advarsel fortæller os, at vi har bundet en state til inputfeltet, men derved har blokeret inputfeltet.

Lad os gøre det muligt at indtaste tekst i vores inputfelt. For at gøre dette skal vi sørge for, at vores state ændres til inputfeltets nuværende værdi ved indtastning.

Til at starte med skal vi tilføje en onChange hændelse til inputfeltet:

function App() { const [value, setValue] = useState('text'); return <div> <input value={value} onChange={handleChange} /> </div>; }

Denne hændelse opfører sig anderledes i React sammenlignet med ren JS. I React udløses den umiddelbart ved ændring af inputfeltet. Det vil sige ved indtastning eller sletning af et tegn.

Lad os nu tilføje vores hændelseshåndterer:

function App() { const [value, setValue] = useState('text'); function handleChange() { } return <div> <input value={value} onChange={handleChange} /> </div>; }

I denne håndterer skal vi læse inputfeltets nuværende tekst og indstille den i staten ved hjælp af funktionen setValue.

Problemet er, at this for denne funktion ikke vil pege på vores inputfelt - det er en egenskab ved React. For at få fat på elementet, hvor hændelsen indtraf, er vi nødt til at bruge event.target:

function App() { const [value, setValue] = useState('text'); function handleChange(event) { console.log(event.target); // henvisning til inputfeltets DOM-element } return <div> <input value={value} onChange={handleChange} /> </div>; }

Lad os udskrive inputfeltets nuværende tekst ved hjælp af event.target:

function App() { const [value, setValue] = useState('text'); function handleChange(event) { console.log(event.target.value); // inputfeltets nuværende tekst } return <div> <input value={value} onChange={handleChange} /> </div>; }

Og lad os nu skrive inputfeltets tekst ind i vores state:

function App() { const [value, setValue] = useState('text'); function handleChange(event) { setValue(event.target.value); } return <div> <input value={value} onChange={handleChange} /> </div>; }

Nu kan vi indtaste tekst i inputfeltet. Samtidig vil staten value altid indeholde inputfeltets nuværende tekst.

Det kan vi let overbevise os om. Lad os udskrive indholdet af vores tekst i et afsnit. I dette tilfælde vil teksten, der indtastes i inputfeltet, automatisk vises i afsnittet:

function App() { const [value, setValue] = useState(''); function handleChange(event) { setValue(event.target.value); } return <div> <input value={value} onChange={handleChange} /> <p>text: {value}</p> </div>; }

Vi kan omskrive det til en mere kompakt version med en anonym pilfunktion:

function App() { const [value, setValue] = useState(''); return <div> <input value={value} onChange={event => setValue(event.target.value)} /> <p>text: {value}</p> </div>; }

Således skal vi gøre følgende for at få ethvert inputfelt til at fungere: oprette en state for dette inputfelt, binde staten til inputfeltets value attribut, tilføje en onChange hændelse til inputfeltet, og i hændelseshåndtereren ændre inputfeltets state til dets tekst.

Disse operationer skal udføres for hvert inputfelt. Det vil sige, hvis du har to inputfelter, så vil du have to states og to håndteringsfunktioner for onChange-hændelsen.

Lav to inputfelter. Lad teksten fra det første inputfelt vises i det første afsnit, og teksten fra det andet inputfelt - i det andet afsnit.

Dansk
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDeutschΕλληνικά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
Vi bruger cookies til webstedets funktion, analyse og personalisering. Behandling af data foregår i henhold til Fortrolighedspolitikken.
accepter alle tilpas afvis