Reacts use: Resource Hook: En Omfattande Guide | MLOG | MLOG}> {/* Assuming this ID doesn't exist and will cause an error */} ); } export default App;

I det hÀr exemplet, om fetchUser-funktionen kastar ett fel (t.ex. pÄ grund av en 404-status), kommer ErrorBoundary-komponenten att fÄnga felet och visa fallback-grÀnssnittet. Fallbacken kan vara vilken React-komponent som helst, som ett felmeddelande eller en försök-igen-knapp.

Avancerade tekniker med use:

1. Cacha resurser

För att undvika överflödig hÀmtning kan du cacha resursen (Promise) och ÄteranvÀnda den över flera komponenter eller renderingar. Denna optimering Àr avgörande för prestandan.

            
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 ( Loading user data...
}> ); } export default App;

I det hÀr exemplet:

2. AnvÀnda use: med serverkomponenter

use:-hooken Àr sÀrskilt anvÀndbar i React Server Components, dÀr datahÀmtning kan utföras direkt pÄ servern. Detta resulterar i snabbare initiala sidladdningar och förbÀttrad SEO.

Exempel med Next.js serverkomponent

            
// app/user/[id]/page.jsx (Serverkomponent i 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 denna Next.js serverkomponent hÀmtar fetchUser-funktionen anvÀndardata pÄ servern. use:-hooken pausar komponenten tills datan Àr tillgÀnglig, vilket möjliggör effektiv server-side rendering.

BÀsta praxis för use:

Verkliga exempel

1. Produktlista för e-handel

FörestÀll dig en e-handelswebbplats som visar produktlistor. Varje produktkort kan anvÀnda use: för att hÀmta produktinformation:

            
// 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) => ( Loading product...
}> ))}
); } export default ProductList;

Detta tillvÀgagÄngssÀtt sÀkerstÀller att varje produktkort laddas oberoende, och den övergripande sidrenderingen blockeras inte av lÄngsamt laddande produkter. AnvÀndaren ser individuella laddningsindikatorer för varje produkt, vilket ger en bÀttre upplevelse.

2. Flöde för sociala medier

Ett flöde för sociala medier kan anvÀnda use: för att hÀmta anvÀndarprofiler, inlÀgg och 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}

Loading comments...
}>
); } export default Post;

Detta exempel anvÀnder nÀstlade Suspense-grÀnser för att ladda inlÀggsinnehÄllet och kommentarerna oberoende av varandra. AnvÀndaren kan se inlÀggsinnehÄllet medan kommentarerna fortfarande laddas.

Vanliga fallgropar och hur man undviker dem

Alternativ till use:

Även om use: erbjuder betydande fördelar, finns det alternativa tillvĂ€gagĂ„ngssĂ€tt för datahĂ€mtning i React:

Valet mellan dessa alternativ beror pÄ komplexiteten i din applikation och dina specifika krav. För enkla datahÀmtningsscenarier kan use: vara ett utmÀrkt alternativ. För mer komplexa scenarier kan bibliotek som useSWR eller React Query vara mer lÀmpliga.

Slutsats

use:-hooken i React erbjuder ett kraftfullt och deklarativt sÀtt att hantera resursladdning och datahÀmtning. Genom att utnyttja use: med Suspense kan du förenkla din komponentlogik, förbÀttra anvÀndarupplevelsen och optimera prestandan. Denna guide har tÀckt grunderna, avancerade tekniker och bÀsta praxis för att anvÀnda use: i dina React-applikationer. Genom att följa dessa riktlinjer kan du effektivt hantera asynkrona operationer och bygga robusta, högpresterande och anvÀndarvÀnliga applikationer. I takt med att React fortsÀtter att utvecklas blir det allt viktigare att bemÀstra tekniker som use: för att ligga i framkant och leverera exceptionella anvÀndarupplevelser.

Resurser