Reacts use-hook for ressurser: En omfattende guide | MLOG | MLOG}> {/* Antar at denne ID-en ikke eksisterer og vil forårsake en feil */} ); } export default App;

I dette eksempelet, hvis fetchUser-funksjonen kaster en feil (f.eks. på grunn av en 404-status), vil ErrorBoundary-komponenten fange opp feilen og vise fallback-grensesnittet. Fallback-en kan være hvilken som helst React-komponent, for eksempel en feilmelding eller en prøv igjen-knapp.

Avanserte teknikker med use

1. Mellomlagring av ressurser

For å unngå overflødig henting kan du mellomlagre ressursen (Promise) og gjenbruke den på tvers av flere komponenter eller renderinger. Denne optimaliseringen er avgjørende for ytelsen.

            
import React, { Suspense, useRef } from 'react';

const resourceCache = new Map();

async function fetchUser(id) {
  const response = await fetch(`https://jsonplaceholder.typicode.com/users/${id}`);
  if (!response.ok) {
    throw new Error(`Failed to fetch user: ${response.status}`);
  }
  return response.json();
}

function getUserResource(userId) {
  if (!resourceCache.has(userId)) {
    resourceCache.set(userId, {
      read() {
        if (!this.promise) {
          this.promise = fetchUser(userId);
        }
        if (this.result) {
          return this.result;
        }
        throw this.promise;
      }
    });
  }
  return resourceCache.get(userId);
}

function UserProfile({ userId }) {
  const resource = getUserResource(userId);
  const user = resource.read();

  return (
    

{user.name}

Email: {user.email}

Phone: {user.phone}

); } function App() { return ( Laster brukerdata...
}> ); } export default App;

I dette eksempelet:

2. Bruke use med serverkomponenter

use-hooken er spesielt nyttig i React Server Components, der datahenting kan utføres direkte på serveren. Dette resulterer i raskere innledende sideinnlastinger og forbedret SEO.

Eksempel med Next.js Server Component

            
// app/user/[id]/page.jsx (Server Component in Next.js)
import React from 'react';

async function fetchUser(id) {
  const response = await fetch(`https://jsonplaceholder.typicode.com/users/${id}`);
  if (!response.ok) {
    throw new Error(`Failed to fetch user: ${response.status}`);
  }
  return response.json();
}

export default async function UserPage({ params }) {
  const user = React.use(fetchUser(params.id));

  return (
    

{user.name}

Email: {user.email}

Phone: {user.phone}

); }

I denne Next.js-serverkomponenten henter fetchUser-funksjonen brukerdata på serveren. use-hooken suspenderer komponenten til dataene er tilgjengelige, noe som muliggjør effektiv server-side rendering.

Beste praksis for use

Eksempler fra den virkelige verden

1. Produktliste i en nettbutikk

Se for deg en nettbutikk som viser produktlister. Hvert produktkort kan bruke use for å hente produktdetaljer:

            
// ProductCard.jsx
import React, { Suspense } from 'react';

async function fetchProduct(productId) {
  const response = await fetch(`/api/products/${productId}`);
  if (!response.ok) {
    throw new Error(`Failed to fetch product: ${response.status}`);
  }
  return response.json();
}

function ProductCard({ productId }) {
  const product = React.use(fetchProduct(productId));

  return (
    

{product.name}

{product.description}

Price: ${product.price}

); } function ProductList({ productIds }) { return (
{productIds.map((productId) => ( Laster produkt...
}> ))}
); } export default ProductList;

Denne tilnærmingen sikrer at hvert produktkort lastes uavhengig, og at den generelle sidens rendering ikke blokkeres av trege produkter. Brukeren ser individuelle lasteindikatorer for hvert produkt, noe som gir en bedre opplevelse.

2. Feed i sosiale medier

En feed i sosiale medier kan bruke use for å hente brukerprofiler, innlegg og kommentarer:

            
// Post.jsx
import React, { Suspense } from 'react';

async function fetchPost(postId) {
  const response = await fetch(`/api/posts/${postId}`);
  if (!response.ok) {
    throw new Error(`Failed to fetch post: ${response.status}`);
  }
  return response.json();
}

async function fetchComments(postId) {
  const response = await fetch(`/api/posts/${postId}/comments`);
  if (!response.ok) {
    throw new Error(`Failed to fetch comments: ${response.status}`);
  }
  return response.json();
}

function Comments({ postId }) {
  const comments = React.use(fetchComments(postId));

  return (
    
    {comments.map((comment) => (
  • {comment.text}
  • ))}
); } function Post({ postId }) { const post = React.use(fetchPost(postId)); return (

{post.title}

{post.content}

Laster kommentarer...
}>
); } export default Post;

Dette eksempelet bruker nestede Suspense-grenser for å laste innleggsinnholdet og kommentarene uavhengig av hverandre. Brukeren kan se innholdet i innlegget mens kommentarene fortsatt lastes.

Vanlige fallgruver og hvordan man unngår dem

Alternativer til use

Selv om use gir betydelige fordeler, finnes det alternative tilnærminger til datahenting i React:

Valget mellom disse alternativene avhenger av kompleksiteten til applikasjonen din og dine spesifikke krav. For enkle datahentingsscenarioer kan use være et godt alternativ. For mer komplekse scenarioer kan biblioteker som useSWR eller React Query være mer passende.

Konklusjon

use-hooken i React gir en kraftig og deklarativ måte å håndtere ressursinnlasting og datahenting på. Ved å utnytte use med Suspense kan du forenkle komponentlogikken, forbedre brukeropplevelsen og optimalisere ytelsen. Denne guiden har dekket det grunnleggende, avanserte teknikker og beste praksis for bruk av use i dine React-applikasjoner. Ved å følge disse retningslinjene kan du effektivt håndtere asynkrone operasjoner og bygge robuste, ytelsessterke og brukervennlige applikasjoner. Ettersom React fortsetter å utvikle seg, blir det avgjørende å mestre teknikker som use for å ligge i forkant og levere eksepsjonelle brukeropplevelser.

Ressurser