Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Håndtering af Sideeffekter med useEffect | Tilstand og Sideeffekter
Practice
Projects
Quizzes & Challenges
Quizzer
Challenges
/
Introduktion til React

bookHåndtering af Sideeffekter med useEffect

Stryg for at vise menuen

Hooken useEffect gør det muligt at synkronisere komponenten med eksterne faktorer/tjenester, herunder datahentning, abonnementer, manuelle ændringer osv.

Syntaks:

Det første argument (setup) er en pilesyntaksfunktion, som udføres efter hver rendering. Det andet argument (dependencies) er et valgfrit array af afhængigheder. Hvis dependencies angives, vil effekten kun blive genudført, hvis en af afhængighederne har ændret sig siden sidste rendering. Hvis arrayet med afhængigheder udelades, vil effekten køre efter hver rendering.

useEffect(setup, dependencies)

Da vi ved, at setup skal være en pilesyntaksfunktion og dependencies skal være et array, får vi følgende optegnelse af hooken useEffect.

useEffect(() => {
  // Something that we need to do
  // after the component is rendered or updated
}, [<optional_dependencies>])
Note
Bemærk

React-komponenter er ofte afhængige af kombinationen af useEffect- og useState-hooks. Disse hooks arbejder sammen for at håndtere tilstand og sideeffekter i komponenter.

Eksempel 1:

Opret komponenten Articles, som anvender useEffect-hooken til at tildele data til articles-tilstanden. Dette er en fremragende mulighed for at udforske den kraftfulde kombination af React-hooks.

import { useEffect, useState } from "react";
import fetchData from "../service/api";

const Articles = () => {
  const [articles, setArticles] = useState([]);

  useEffect(() => {
    fetchData()
      .then((resp) => {
        setArticles(resp.jokes);
      })
      .catch((error) => {
        console.error(error);
      });
  }, []);

  return (
    // Render some markup based on the articles data
  );
};

I denne komponent anvendes useEffect-hooken til at sikre, at articles-tilstanden bliver udfyldt med data. Som tidligere nævnt, udføres useEffect-funktionen efter hver rendering, hvilket garanterer, at data vises for brugeren, hvis de er hentet. Dette sikrer en problemfri brugeroplevelse med opdateret indhold.

Linje for linje forklaring:

  • Linje 1: Vi importerer useEffect og useState hooks fra React-biblioteket for at udnytte dets funktionalitet;
  • Linje 2: Vi importerer funktionen fetchData fra "../service/api". Denne funktion er ansvarlig for at foretage en API-anmodning og hente data;
  • Linje 4: Articles-komponenten defineres ved brug af den konventionelle funktionssyntaks;
  • Linje 5: Vi initialiserer state ved hjælp af useState hook, hvilket repræsenterer den initiale værdi af variablen articles. I dette eksempel er det et tomt array;
  • Linje 7-15: Det reelle brugsscenarie for useEffect hook;
    • Linje 7 og linje 15: er syntaksen. Det er sådan, vi vil bruge det;
    • Linje 8: funktionen fetchData kaldes. Denne funktion forventes at foretage en API-anmodning og returnere et promise;
    • Linje 9-11: Når promiset bliver opfyldt (then-blokken), modtages et resp-objekt. Dataene udtrækkes fra resp ved hjælp af resp.jokes, som sættes ind i articles state ved hjælp af setArticles;
    • Linje 12-14: Hvis der opstår en fejl under API-anmodningen (i catch-blokken), logges den til konsollen med console.error.
  • Linje 17-19: Komponentens markup bliver gengivet.

Fuld app-kode:

Eksempel 2:

Vi opretter Counter-komponenten til at spore en counter-værdi. Opgaven er at logge værdien af variablen counter, hver gang den ændres. For at opnå dette vil vi anvende useEffect hook med et afhængighedsarray bestående af variablen counter.

import React, { useState, useEffect } from "react";

const Counter = () => {
  const [count, setCount] = useState(0);

  useEffect(() => {
    console.log("Count has changed:", count);
  }, [count]);

  const handleIncrement = () => {
    setCount(count + 1);
  };

  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={handleIncrement}>Increment</button>
    </div>
  );
};

Linje for linje forklaring:

  • Linje 1: Vi importerer useEffect og useState hooks fra React-biblioteket for at udnytte dets funktionalitet;
  • Linje 3: Den konventionelle funktionssyntaks definerer "Counter"-komponenten;
  • Linje 4: Vi initialiserer tilstanden ved hjælp af useState hooken, som repræsenterer den indledende værdi af variablen count. I dette eksempel er den 0;
  • Linje 6-8: Den faktiske anvendelse af useEffect hooken;
    • Linje 7: denne logik udføres, hver gang værdien i afhængighedsarrayet ændres. I dette tilfælde er det variablen count;
    • Linje 8: afhængighedsarray. Vi informerer React om, at når værdien af variablen count ændres, skal koden inde i funktionen til useEffect hooken køres.
  • Linje 14-19: Komponentens markup bliver gengivet.

Fuld app-kode:

Tag venligst et øjeblik til at inspicere konsollen og observere eksekveringslogikken for pilfunktionen inde i useEffect hooken. Pilfunktionen udføres først ved den indledende rendering og kaldes derefter igen, hver gang værdien af variablen counter ændres. Du kan bekræfte denne adfærd ved at observere de tilsvarende logs i konsollen.

1. Hvad er formålet med useEffect hooken i React?

2. Hvilke to hovedargumenter tager useEffect hooken?

question mark

Hvad er formålet med useEffect hooken i React?

Select the correct answer

question mark

Hvilke to hovedargumenter tager useEffect hooken?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 3. Kapitel 3

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Sektion 3. Kapitel 3
some-alt