⊗jsrtPmFmsII 56 of 112 menu

Att arbeta med inputs i React

Att arbeta med inputs i React sker med hjälp av states. Varje input tilldelas ett eget state som innehåller inputens value.

Låt oss titta på ett exempel. Låt oss säga att vi har en input:

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

Låt oss också säga att vi har ett state:

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

Låt oss binda vårt state till inputens value-attribut:

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

I så fall blir resultatet att när statet ändras, kommer inputens text att ändras reaktivt.

Detta ger dock en intressant bieffekt: nu när koden körs i webbläsaren är det omöjligt att ändra texten i inputfältet! Varför: för att när text skrivs in i inputfältet ändras inte statet value, följaktligen bör inte texten i inputfältet ändras heller.

Prova själv. Kopiera min kod och kör den hos dig. Försök ändra texten i inputfältet - du kommer inte att lyckas. Öppna webbläsarens konsol - du kommer att se en varning från React där. Denna varning indikerar för oss att vi har bundit ett state till inputfältet, men därmed har låst inputfältet.

Låt oss se till att vi kan skriva text i vår input. För att göra detta måste vi se till att när vi skriver in text ändras vårt state till inputfältets aktuella värde.

Först och främst behöver vi lägga en händelsehanterare för onChange på inputfältet:

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

Denna händelse i React beter sig annorlunda jämfört med vanlig JS. I React utlöses den omedelbart vid förändring av inputfältet. Det vill säga när en symbol skrivs in eller tas bort.

Låt oss nu lägga till hanteraren för vår händelse:

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

I denna hanterare måste vi läsa inputfältets aktuella text och sätta den i statet med hjälp av funktionen setValue.

Problemet är att this för denna funktion inte kommer att peka på vår input - sådan är egenskapen hos React. För att få elementet där händelsen inträffade måste vi använda event.target:

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

Låt oss med hjälp av event.target skriva ut inputfältets aktuella text:

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

Och nu skriver vi inputfältets text till vårt 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 skriva text i inputfältet. Samtidigt kommer statet value alltid att innehålla inputfältets aktuella text.

Vi kan lätt övertyga oss om detta. Låt oss skriva ut innehållet i vår text i ett stycke. I detta fall, när text skrivs in i inputfältet, kommer den inmatade texten automatiskt att dyka upp i stycket:

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 skriva om till en mer kompakt variant med en anonym arrow-funktion:

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

Således, för att få en input att fungera behöver vi följande: skapa ett state för denna input, bind statet till inputens value-attribut, lägga till en onChange-händelse på inputfältet, i händelsehanteraren ändra inputens state till dess text.

Dessa operationer måste utföras för varje input. Det vill säga, om du har två inputs, kommer du att ha två states och två funktioner-hanterare för onChange-händelsen.

Skapa två inputs. Låt texten från den första inputen skrivas ut i det första stycket, och texten från den andra inputen - i det andra stycket.

Svenska
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi använder kakor för webbplatsens funktion, analys och personalisering. Behandling av data sker i enlighet med Integritetspolicyn.
acceptera alla anpassa avvisa