⊗jsrtPmCoLSU 95 of 112 menu

Olekute tõstmine Reactis

Sageli peavad mitu komponenti kajastama samu muutuvaid andmeid. Reactis soovitatakse tõsta ühine olek lähima ühise esivanema juurde. Vaatame seda näite varal.

Oletame, et tahame teha vee temperatuuri kalkulaatori. See koosneb sisendväljast, kuhu kasutaja sisestab temperatuuri, ja lõigust, kus kuvatakse järeldus: vesi on vedel, vesi on tahke, vesi on gaasiline.

Oletame, et meie kalkulaator on konteinerkomponent Calculator:

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

Eraldame temperatuuri sisestamise välja komponenti TempInp ja järelduse lõigu - komponenti Verdict:

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

On lihtne mõista, et nii TempInp kui ka Verdict peavad omama temperatuuri olekut. Samas on loogiline, et see peaks olema sama temperatuur: andmete sisestamisel väljale peaks kuvatama järeldus.

Sellisel juhul soovitatakse kasutada võtet, mida nimetatakse oleku tõstmiseks: olek, mis on ühine kahele (või enamale) komponendile, tõstetakse üles nende ühise vanema juurde.

Meie puhul selgub, et temperatuuri olek peaks kuuluma komponendile Calculator, mis edastab selle TempInp ja Verdict komponentidele propsidena:

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

Komponendis TempInp peaks olema sisendväli temperatuuri muutmiseks. Kuid kuna see temperatuur on selle komponendi props, siis otse TempInp komponendis ei saa seda muuta. Õige oleks komponendist Calculator edastada spetsiaalne funktsioon temperatuuri muutmiseks:

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

Muide, võib mitte kasutusele võtta uut funktsiooni, vaid edastada alamkomponendile funktsiooni setTemp:

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

Kirjutage komponentide TempInp ja Verdict implementatsioon.

Mõelge välja 3 ülesannet, kus on vaja kasutada oleku tõstmist. Kirjutage nende ülesannete lahendused.

Eesti
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Me kasutame saidi toimimiseks, analüüsi ja personaliseerimiseks küpsiseid. Andmete töötlemine toimub vastavalt Privaatsuspoliitikale.
nõustu kõigega häälesta keeldu