⊗jsrtPmCoLSU 95 of 112 menu

Lyfta state i React

Ofta behöver flera komponenter reflektera samma föränderliga data. I React rekommenderas att man lyfter delat state till närmaste gemensamma förfader. Låt oss titta på ett exempel.

Låt oss säga att vi vill göra en kalkylator för vattentemperatur. Den kommer att bestå av en input, där användaren matar in temperaturen, och ett stycke, där bedömningen kommer att skrivas ut: vatten är flytande, vatten är fast, vatten är gasformigt.

Låt oss säga att vår kalkylator representerar en behållarkomponent Calculator:

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

Låt oss bryta ut input för temperaturinmatning till en komponent TempInp, och stycket med bedömningen - till en komponent Verdict:

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

Det är lätt att förstå att både TempInp och Verdict borde ha state för temperaturen. Samtidigt är det logiskt att detta borde vara samma temperatur: allt eftersom data matas in i input ska bedömningen visas.

I sådana fall rekommenderas man att använda en teknik, som kallas att lyfta state: state, gemensamt för två (eller fler) komponenter lyfts uppåt till deras närmaste gemensamma förälder.

I vårt fall kommer det att innebära att state med temperaturen bör tillhöra komponenten Calculator, som kommer att skicka det till TempInp och Verdict som props:

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

I komponenten TempInp bör det finnas en input för att ändra temperaturen. Men eftersom denna temperatur är en prop i denna komponent, så kan den inte ändras direkt i TempInp. Rätt sätt vore att skicka från komponenten Calculator en speciell funktion för att ändra temperaturen:

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

Man kan förresten undvika att introducera en ny funktion, utan skicka funktionen setTemp till barnkomponenten:

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

Skriv implementationen av komponenterna TempInp och Verdict.

Kom på 3 uppgifter där man behöver använda att lyfta state. Skriv lösningar till dessa uppgifter.

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