⊗jsrtPmCoLSU 95 of 112 menu

Elevação de Estado no React

Frequentemente, vários componentes precisam refletir os mesmos dados em mudança. No React, é recomendado elevar o estado compartilhado para o ancestral comum mais próximo. Vamos ver um exemplo.

Suponha que queremos fazer uma calculadora de temperatura da água. Ela será composta por um input, no qual o usuário irá inserir a temperatura, e um parágrafo, no qual será exibido o veredito: água líquida, água sólida, água gasosa.

Suponha que nossa calculadora seja um componente contêiner Calculator:

function Calculator() { return <div> </div>; }

Vamos extrair o input para inserir a temperatura para o componente TempInp, e o parágrafo com o veredito - para o componente Verdict:

function Calculator() { return <div> <Verdict /> <TempInp /> </div>; }

É fácil entender que tanto TempInp quanto Verdict devem ter um estado com a temperatura. Ao mesmo tempo, é lógico que esta deve ser a mesma temperatura: à medida que os dados são inseridos no input, o veredito deve ser exibido.

Nesse caso, é recomendado usar uma técnica chamada elevação de estado: o estado, compartilhado por dois (ou mais) componentes, é elevado para cima, até seu ancestral comum.

No nosso caso, resultará que o estado com a temperatura deve pertencer ao componente Calculator, que o passará para TempInp e Verdict como props:

function Calculator() { const [temp, setTemp] = useState(0); return <div> <Verdict temp={temp} /> <TempInp temp={temp} /> </div>; }

No componente TempInp deve haver um input para alterar a temperatura. Mas, como essa temperatura é uma prop deste componente, não é possível alterá-la diretamente em TempInp. O correto será passar do componente Calculator uma função específica para alterar a temperatura:

function Calculator() { const [temp, setTemp] = useState(0); function changeTemp(event) { setTemp(event.target.value); } return <div> <Verdict temp={temp} /> <TempInp temp={temp} changeTemp={changeTemp} /> </div>; }

Pode-se, aliás, não criar uma nova função, e passar para o componente filho a função setTemp:

function Calculator() { const [temp, setTemp] = useState(0); return <div> <Verdict temp={temp} /> <TempInp temp={temp} setTemp={setTemp} /> </div>; }

Escreva a implementação dos componentes TempInp e Verdict.

Invente 3 tarefas nas quais seja necessário usar a elevação de estado. Escreva as soluções dessas tarefas.

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