⊗jsrtPmFmsII 56 of 112 menu

Werken met inputs in React

Werken met inputs in React gebeurt met behulp van states. Aan elke input wordt een eigen state toegewezen, die de value van de input bevat.

Laten we naar een voorbeeld kijken. Stel we hebben een input:

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

Stel dat we ook een state hebben:

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

Laten we onze state koppelen aan het value attribuut van de input:

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

In dat geval zal bij het wijzigen van de state, de tekst van de input reactief veranderen.

Dit geeft echter een interessant bijeffect: nu is het onmogelijk om de tekst in de input te veranderen wanneer de code in de browser wordt uitgevoerd! Waarom: omdat bij het invoeren van tekst in de input de state value niet verandert, en bijgevolg de tekst in de input niet zou moeten veranderen.

Probeer het zelf. Kopieer mijn code en voer het bij jezelf uit. Probeer de tekst in de input te veranderen - het zal je niet lukken. Open de browserconsole - je zult daarin een waarschuwing van React zien. Deze waarschuwing geeft aan dat we een state aan de input hebben gekoppeld, maar daarmee de input hebben geblokkeerd.

Laten we ervoor zorgen dat we tekst kunnen invoeren in onze input. Hiervoor moeten we ervoor zorgen dat bij invoer onze state verandert naar de huidige waarde van de input.

Om te beginnen moeten we hiervoor een onChange event aan de input hangen:

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

Dit event gedraagt zich in React anders vergeleken met pure JS. In React wordt het onmiddellijk geactiveerd bij wijziging van de input. Dat wil zeggen bij het invoeren of verwijderen van een teken.

Laten we nu de event handler toevoegen:

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

In deze handler moeten we de huidige tekst van de input lezen en deze in de state zetten met behulp van de functie setValue.

Het probleem is dat this in deze functie niet naar onze input zal wijzen - dat is een eigenschap van React. Om het element te krijgen waarin het event plaatsvond, moeten we event.target gebruiken:

function App() { const [value, setValue] = useState('text'); function handleChange(event) { console.log(event.target); // verwijzing naar het DOM element van de input } return <div> <input value={value} onChange={handleChange} /> </div>; }

Laten we met event.target de huidige tekst van de input tonen:

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

En laten we nu de tekst van de input in onze state opslaan:

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

Nu kunnen we tekst invoeren in de input. Hierbij zal de state value altijd de huidige tekst van de input bevatten.

We kunnen dit gemakkelijk verifiëren. Laten we de inhoud van onze tekst in een paragraaf tonen. In dat geval zal bij het invoeren van tekst in de input de ingevoerde tekst automatisch verschijnen in de paragraaf:

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

We kunnen dit herschrijven naar een compactere variant met een anonieme pijlfunctie:

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

Voor de werking van elke input hebben we het volgende nodig: een state voor deze input creëren, de state koppelen aan het value attribuut van de input, een onChange event aan de input hangen, en in de event handler de state van de input wijzigen naar zijn tekst.

Deze operaties moeten voor elke input worden uitgevoerd. Dat wil zeggen, als je twee inputs hebt, dan heb je twee states en twee event handler functies voor het onChange event.

Maak twee inputs. Laat de tekst van de eerste input verschijnen in de eerste paragraaf, en de tekst van de tweede input - in de tweede paragraaf.

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