⊗jsrtPmFmsII 56 of 112 menu

Lucrul cu input-uri în React

Lucrul cu input-uri în React se face cu ajutorul stărilor. Fiecărui input i se atribuie propria sa stare, care conține value input-ului.

Să ne uităm la un exemplu. Să presupunem că avem un input:

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

Să presupunem, de asemenea, că avem o stare:

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

Să legăm starea noastră la atributul value input-ului:

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

În acest caz, se va întâmpla ca la modificarea stării, textul input-ului să se schimbe reactiv.

Aceasta, totuși, dă un efect secundar interesant: acum, când rulezi codul în browser, este imposibil să schimbi textul în input! De ce: pentru că la introducerea textului în input nu se schimbă starea value, în consecință, nici textul din input nu ar trebui să se schimbe.

Încearcă tu însuți. Copiază-mi codul și rulează-l la tine. Încearcă să modifici textul în input - nu vei reuși nimic. Deschide consola browser-ului - vei vedea în ea o avertizare de la React. Această avertizare ne indică faptul că am legat o stare la input, dar astfel am blocat input-ul.

Să facem astfel încât în input-ul nostru să putem introduce text. Pentru aceasta trebuie să facem așa încât la introducere să se modifice starea noastră la valoarea curentă a input-ului.

Pentru început, pentru aceasta trebuie să atașăm la input evenimentul onChange:

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

Acest eveniment în React se comportă diferit față de JS simplu. În React el se declanșează imediat la modificarea input-ului. Adică la introducerea sau ștergerea unui caracter.

Să adăugăm acum handler-ul evenimentului nostru:

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

În acest handler trebuie să citim textul curent al input-ului și să îl setăm în stare cu ajutorul funcției setValue.

Problema este că this acestei funcții nu va indica către input-ul nostru - aceasta este o particularitate a React. Pentru a obține elementul în care s-a produs evenimentul, trebuie să folosim event.target:

function App() { const [value, setValue] = useState('text'); function handleChange(event) { console.log(event.target); // referință la elementul DOM al input-ului } return <div> <input value={value} onChange={handleChange} /> </div>; }

Să afișăm cu ajutorul event.target textul curent al input-ului:

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

Și acum să scriem textul input-ului în starea noastră:

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

Acum vom putea introduce text în input. În același timp starea value va conține întotdeauna textul curent al input-ului.

Putem să ne convingem ușor de acest lucru. Să afișăm conținutul textului nostru într-un paragraf. În acest caz, la introducerea textului în input, textul introdus va apărea automat în paragraf:

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

Putem rescrie într-o variantă mai compactă cu o funcție arrow anonimă:

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

Astfel, pentru funcționarea oricărui input avem nevoie de următoarele: să creăm o stare pentru acel input, să legăm starea la atributul value input-ului, să atașăm evenimentul onChange la input, în handler-ul evenimentului să modificăm starea input-ului la textul său.

Aceste operații vor trebui efectuate pentru fiecare input. Adică, dacă ai două input-uri, atunci vei avea două stări și două funcții-handler ale evenimentului onChange.

Creează două input-uri. Fie ca textul primului input să se afișeze în primul paragraf, iar textul celui de-al doilea input - în al doilea paragraf.

Română
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Folosim cookie pentru funcționarea site-ului, analiză și personalizare. Prelucrarea datelor are loc în conformitate cu Politica de confidențialitate.
acceptă toate configurează respinge