⊗jsrtPmCoLSU 95 of 112 menu

Tilojen nostaminen Reactissa

Usein useiden komponenttien tulee heijastaa samoja muuttuvia tietoja. Reactissa suositellaan yhteisen tilan nostamista lähimpään yhteiseen esi-isään. Katsotaanpa esimerkkiä.

Oletetaan, että haluamme tehdä veden lämpötilan laskurin. Se koostuu syöttökentästä, johon käyttäjä syöttää lämpötilan, ja kappaleesta, johon tulostetaan päätelmä: vesi on nestemäistä, vesi on kiinteää, vesi on kaasumaista.

Oletetaan, että laskurimme on säiliökomponentti Calculator:

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

Erotetaan lämpötilan syöttökenttä komponenttiin TempInp, ja päätelmäkappale - komponenttiin Verdict:

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

On helppo ymmärtää, että sekä TempInp että Verdict tarvitsevat tilan lämpötilalle. Samaan aikaan on loogista, että sen tulisi olla sama lämpötila: kun tietoja syötetään syöttökenttään, päätelmän tulisi näkyä.

Tässä tapauksessa suositellaan käyttämään tekniikkaa, jota kutsutaan tilan nostamiseksi: tila, joka on yhteinen kahdelle (tai useammalle) komponentille, nostetaan ylös niiden yhteiseen vanhempaan.

Meidän tapauksessamme käy niin, että lämpötilatila kuuluu komponentille Calculator, joka välittää sen TempInp:lle ja Verdict:lle propseina:

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

Komponentissa TempInp tulee olla syöttökenttä lämpötilan muuttamiseen. Mutta koska tämä lämpötila on tämän komponentin props, sitä ei voida suoraan muuttaa TempInp:ssä. Oikea tapa on välittää komponentista Calculator erityinen funktio lämpötilan muuttamiseksi:

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

Voit muuten olla ottamatta käyttöön uutta funktiota, vaan välittää lapsikomponenttiin funktion setTemp:

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

Kirjoita komponenttien TempInp ja Verdict toteutus.

Keksi 3 tehtävää, joissa tarvitaan tilan nostamista. Kirjoita näiden tehtävien ratkaisut.

Suomi
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Käytämme evästeitä verkkosivuston toiminnalle, analytiikalle ja personoinnille. Tietojen käsittely tapahtuu Tietosuojakäytännön mukaisesti.
hyväksy kaikki mukauta hylkää