⊗jsrtPmHkURf 12 of 47 menu

useRef-hookki refien käsittelyyn Reactissa

Tällä oppitunnilla työskentelemme refien kanssa. Selvyyden vuoksi tarkastellaan hookin useRef toimintaa verrattuna hookiin useState.

Luodaan komponentti, jossa on painike:

return ( <div> <button> state click </button> </div> );

Tuodaan komponenttiin useState:

import { useState } from 'react';

Ja luodaan tila state:

const [state, setState] = useState(0);

Tehdään nyt niin, että painiketta napsautettaessa meidän state kasvaa 1:llä. Tulostamme tilan arvon suoraan painikkeen tekstiin:

<button onClick={handleStateClick}> state click: {state} </button>

Kuvataan painikkeen napsautuksen käsittelevä funktio handleStateClick:

function handleStateClick() { setState(state + 1); }

Painellaan painiketta ja näemme, kuinka tilan arvo kasvaa.

Luodaan nyt App-komponentti käyttämällä ei tilaa, vaan refiä.

Aluksi, tuodaan komponenttiin useRef:

import { useRef } from 'react';

Ja luodaan ref ref. useRef-hookki palauttaa ref-objektin, jolla on yksi ominaisuus current, joka meitä kiinnostaa tulevaisuudessa. Asetamme sen alkuarvoksi 0:

const ref = useRef(0);

Lisätään painikkeelle klikkauskäsittelijä. Muista, että meidän pitää lukea/muuttaa ei itse ref:ä, vaan sen ominaisuutta current:

<button onClick={handleRefClick}> ref click: {ref.current} </button>

Lisätään funktio painikkeen klikkauksen käsittelyyn. Tässä kasvatamme current:ia 1:llä, kuten edellisessä tilan esimerkissä. Toisin kuin tilassa, jossa tarvitaan funktio setState sen arvon muuttamiseen, refin ominaisuuden kanssa työskentelemme suoraan:

function handleRefClick() { ref.current = ref.current + 1; }

Painellaan nyt painikettamme. Ja mitä me naemme? Kun napsautamme sitä, kuten meillä oli aluksi 0, niin se ei muutu.

Voit tietysti epäillä, että arvo muuttuu ollenkaan. Tarkistetaan se. Tehdäksesi tämän funktioon klikkauskäsittelijään lisätään vielä yksi koodirivi current-arvon tulostamiseksi konsoliin:

function handleRefClick() { ref.current = ref.current + 1; console.log('ref click: ' + ref.current); }

Avataan nyt konsoli selaimessa, painellaan uudelleen painiketta ja varmistutaan, että arvo todella muuttuu jokaisella klikillä eikä mitään huijausta ole.

Nyt näemme, että toisin kuin tilassa, refin arvon muutos ei aiheuta komponentin uudelleenrenderöintiä. Siksi me joka kerran painikkeen tekstissä näemme alkuperäisen arvon 0.

Jos siis tietojasi käytetään renderöintiin, tallenna ne tilassa, ja jos et tarvitse uudelleenrenderöintiä, refien käyttö voi olla tehokkaampaa.

Olkoon komponentissasi kappale, jossa on teksti 'text' ja painike. Tee niin, että joka kerta kun painiketta napsautetaan tekstikappaleen loppuun lisätään huutomerkki. Tee tämä käyttämällä tilaa.

Luo komponentti App, mutta tilan sijaan käytä nyt refiä. Varmista, että painiketta painettaessa tekstikappaleen teksti ei muutu. Lisää myös tekstikappaleen tekstin tulostus konsoliin, avaa se ja varmista, että teksti todella muuttuu.

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ää