Hämta data (klientkomponent)
Hämta och visa data
- Vi kommer nu titta närmare på useState och useEffect som vi behöver för att kunna hämta och visa data.
- För att hämta data använder vi funktionen fetch som finns inbyggd i webbläsaren
const response = await fetch('https://www.api.com/data');
const data = await response.json();
console.log(data);
useState
- När vi väl har hämtat datan vill vi visa den i vår komponent
- Med hjälp av useState kan vi skapa en variabel som vi kan använda för att visa datan
const [count, setCount] = useState(0);
- count är variabeln som vi kan använda för att visa datan
- setCount är funktionen vi använder för att uppdatera datan
- 0 är värdet som count får från början
useEffect
- Kod i en komponent körs varje gång komponenten renderas vilket sker när vi uppdaterar statet
- För att förhindra en oändlig loop av api-anrop måste vi lägga fetch-koden i useEffect
useEffect - Dependency array
useEffect(() => {
//kod som körs när komponenten renderas
, []);
- Med hjälp av dependency array kan vi bestämma när useEffect ska köras
- Antingen hämtar vi bara data när komponenten renderas första gången
- Har vi någon typ av filtrering eller sökning kan vi lägga till variabler i arrayen som useEffect ska lyssna på
Komplett exempel ladda och visa data
import React, { useState, useEffect } from 'react';
const App = () => {
const [data, setData] = useState(0);
useEffect(() => {
const fetchData = async () => {
const response = await fetch('https://www.api.com/data');
const data = await response.json();
setData(data);
};
fetchData();
}, []);
return (
<div>
<p>{data}</p>
</div>
);
};
Övning 1 - Hämta och visa data
Typning av data
- Vi kan använda Typescript för att typa datan som vi hämtar
- Genom att skapa en type kan vi ange vilken typ av data vi förväntar oss
type CatFact = {
fact: string;
length: number;
};
const getProducts = async () => {
const response = await fetch('https://catfact.ninja/fact');
const data = await response.json();
return data as CatFact;
};
Övning 2 - Sortera om data med nytt anrop