⊗jsrtPmFmsII 56 of 112 menu

Trabalhando com inputs no React

Trabalhar com inputs no React é feito por meio de estados. Cada input recebe seu próprio estado, contendo o value do input.

Vamos ver um exemplo. Suponha que temos um input:

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

Suponha também que temos um estado:

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

Vamos vincular nosso estado ao atributo value do input:

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

Nesse caso, acontece que ao alterar o estado, o texto do input mudará de forma reativa.

Isso, no entanto, dá um efeito colateral interessante: agora, ao executar o código no navegador, é impossível alterar o texto no input! Por quê: porque ao digitar texto no input, o estado value não muda, consequentemente, o texto no input não deve mudar.

Tente você mesmo. Copie meu código e execute-o você mesmo. Tente alterar o texto no input - você não conseguirá. Abra o console do navegador - você verá um aviso do React nele. Este aviso nos indica que vinculamos um estado ao input, mas com isso bloqueamos o input.

Vamos fazer com que seja possível digitar texto em nosso input. Para isso, precisamos fazer com que, ao digitar, nosso estado mude para o valor atual do input.

Para começar, precisamos adicionar ao input o evento onChange:

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

Este evento no React se comporta de forma diferente em comparação com JS puro. No React, ele é acionado imediatamente ao alterar o input. Ou seja, ao digitar ou apagar um caractere.

Agora vamos adicionar o manipulador do nosso evento:

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

Neste manipulador, devemos ler o texto atual do input e defini-lo no estado usando a função setValue.

O problema é que o this desta função não apontará para o nosso input - esta é uma característica do React. Para obter o elemento onde o evento ocorreu, precisamos usar event.target:

function App() { const [value, setValue] = useState('texto'); function handleChange(event) { console.log(event.target); // referência ao elemento DOM do input } return <div> <input value={value} onChange={handleChange} /> </div>; }

Vamos exibir o texto atual do input usando event.target:

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

E agora vamos escrever o texto do input em nosso estado:

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

Agora conseguiremos digitar texto no input. Com isso, o estado value sempre conterá o texto atual do input.

Podemos facilmente verificar isso. Vamos exibir o conteúdo do nosso texto em um parágrafo. Neste caso, ao digitar texto no input, o texto digitado aparecerá automaticamente no parágrafo:

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

Podemos reescrever para uma versão mais compacta com uma função arrow anônima:

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

Assim, para que qualquer input funcione, precisamos do seguinte: criar um estado para esse input, vincular o estado ao atributo value do input, adicionar o evento onChange ao input, no manipulador do evento, alterar o estado do input para o seu texto.

Estas operações precisarão ser realizadas para cada input. Ou seja, se você tiver dois inputs, então você terá dois estados e duas funções manipuladoras do evento onChange.

Faça dois inputs. Deixe o texto do primeiro input ser exibido no primeiro parágrafo, e o texto do segundo input - no segundo parágrafo.

Português
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Nós usamos cookies para o funcionamento do site, análises e personalização. O processamento de dados é realizado de acordo com a Política de Privacidade.
aceitar todas configurar rejeitar