⊗jsrtPmHkURf 12 of 47 menu

Hooken useRef for arbeid med refs i React

I denne leksjonen skal vi jobbe med refs. For å illustrere, la oss analysere arbeidet til hooken useRef i sammenligning med hooken useState.

La oss opprette en komponent med en knapp:

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

Importer useState inn i komponenten:

import { useState } from 'react';

Og la oss opprette en state state:

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

Og la oss nå gjøre slik at ved klikk på knappen øker vår state med 1. Vi vil vise state-verdien rett i knappens tekst:

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

La oss beskrive funksjonen for å håndtere klikk på knappen handleStateClick:

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

La oss trykke på knappen og se hvordan state-verdien vokser.

La oss nå opprette en komponent App, men ved å bruke ikke state, men en ref.

Først, importer useRef inn i komponenten:

import { useRef } from 'react';

Og la oss opprette en ref ref. Hooken useRef returnerer som sitt resultat et ref-objekt med en enkelt egenskap current, som vil være av interesse for oss i fremtiden. La oss sette dens startverdi til 0:

const ref = useRef(0);

La oss legge en klikk-håndterer på knappen. Husk at vi må lese/endre ikke selve ref, men dens egenskap current:

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

La oss legge til en funksjon for å håndtere klikk på knappen vår. Her vil vi øke current med 1, akkurat som i forrige eksempel med state. I motsetning til state, hvor det kreves en funksjon setState for å endre dens verdi, jobber vi direkte med ref-egenskapen:

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

La oss nå trykke på knappen vår. Og hva ser vi? Når vi klikker på den, forblir den 0 som den opprinnelig var, og den endres ikke.

Du kan selvfølgelig begynne å tvile på om verdien i det hele tatt endres. La oss sjekke dette. For å gjøre dette, i funksjonen for klikk-håndtereren, la oss legge til en kodelinje til med utskrift av verdien current i konsollen:

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

Og nå, ved å åpne konsollen i nettleseren, la oss klikke på knappen igjen og forsikre oss om at verdien virkelig endres ved hvert klikk og at det ikke er noe bedrag.

Nå ser vi at i motsetning til state, forårsaker endring av ref-verdien ikke re-rendering av komponenten. Derfor ser vi hver gang i knappens tekst startverdien 0.

Derfor, hvis dine data brukes for rendering, så lagre dem i state, og hvis du ikke trenger rendering, i så fall kan bruk av refs være mer effektivt.

Anta at i komponenten din er det et avsnitt med teksten 'text' og en knapp. Gjør slik at hver gang du klikker på knappen legges et utropstegn til i slutten av avsnittets tekst. Gjør dette ved hjelp av state.

Opprett en komponent App, men i stedet for state bruk nå en ref. Forsikre deg om at når knappen trykkes, vil ikke teksten i avsnittet endres. Legg også til utskrift av teksten i avsnittet i konsollen, åpne den og forsikre deg om at teksten faktisk endres.

Norsk
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi bruker informasjonskapsler for nettstedets funksjonalitet, analyse og personalisering. Behandling av data foregår i henhold til Personvernerklæringen.
godta alle tilpass avvis