⊗jsrtPmFmsII 56 of 112 menu

Rad sa inputima u React

Rad sa inputima u React se odvija pomoću state-ova. Svakom inputu se dodeljuje njegov state, koji sadrži value inputa.

Pogledajmo na primeru. Recimo da imamo input:

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

Neka takođe imamo state:

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

Hajde da ka atributu value inputa povežemo naš state:

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

U ovom slučaju će se pokazati da pri promeni state-a, reaktivno će se promeniti i tekst inputa.

Ovo, međutim, daje interesantan sporedni efekat: sada pri pokretanju koda u pretraživaču u inputu je nemoguće promeniti tekst! Zašto: zato što se pri unosu teksta u input ne menja state value, shodno tome, ni tekst u inputu ne bi trebalo da se menja.

Probajte sami. Kopirajte moj kod i pokrenite kod sebe. Probajte da menjate tekst u inputu - neće vam uspeti. Otvorite konzolu pretraživača - videćete u njoj upozorenje React-a. Ovo upozorenje nam ukazuje da smo povezali state sa inputom, ali time blokirali input.

Hajde da učinimo tako da u naš input možemo da unosimo tekst. Za to je potrebno da učinimo tako da se pri unosu promeni naš state na trenutnu vrednost inputa.

Za početak, za ovo treba da stavimo na input dogadjaj onChange:

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

Ovaj dogadjaj u React se ponaša drugačije u poređenju sa čistim JS-om. U React on okida se odmah po promeni inputa. To znači pri unosu ili brisanju simbola.

Hajde sada da dodamo obrađivač našeg dogadjaja:

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

U ovom obrađivaču treba da pročitamo trenutni tekst inputa i da ga postavimo u state pomoću funkcije setValue.

Problem je u tome što this ove funkcije neće pokazivati na naš input - takva je osobenost React-a. Da bismo dobili element, u kom se dogodio dogadjaj, neophodno je da koristimo event.target:

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

Ispišimo pomoću event.target trenutni tekst inputa:

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

A sada upišimo tekst inputa u naš state:

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

Sada ćemo moći da unosimo tekst u input. Pri tome state value će uvek sadržati trenutni tekst inputa.

Lako možemo da se uverimo u ovo. Ispišimo sadržaj našeg teksta u paragraf. U ovom slučaju pri unosu teksta u input uneti tekst će automatski da se pojavi u paragrafu:

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

Možemo prepisati na kompaktniju varijantu sa anonimnom streličastom funkcijom:

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

Dakle, za rad bilo kog inputa nama je potrebno sledeće: napraviti state za taj input, povezati state sa atributom value inputa, postaviti dogadjaj onChange na input, u obrađivaču dogadjaja promeniti state inputa na njegov tekst.

Ove operacije će biti potrebno sprovesti sa svakim inputom. To znači, ako imate dva inputa, onda ćete imati dva state-a i dve funkcije-obrađivača dogadjaja onChange.

Napravite dva inputa. Neka se tekst prvog inputa ispisuje u prvi paragraf, a tekst drugog inputa - u drugi paragraf.

Srpski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Koristimo kolačiće za rad sajta, analitiku i personalizaciju. Obrada podataka se vrši u skladu sa Politikom privatnosti.
prihvati sve podesi odbij