Reacts `use:`-Hook für Ressourcen: Ein umfassender Leitfaden | MLOG | MLOG}> {/* Angenommen, diese ID existiert nicht und verursacht einen Fehler */} ); } export default App;

Wenn in diesem Beispiel die fetchUser-Funktion einen Fehler wirft (z.B. aufgrund eines 404-Status), fängt die ErrorBoundary-Komponente den Fehler ab und zeigt die Fallback-Benutzeroberfläche an. Das Fallback kann eine beliebige React-Komponente sein, wie z.B. eine Fehlermeldung oder eine Schaltfläche zum erneuten Versuchen.

Fortgeschrittene Techniken mit use:

1. Caching von Ressourcen

Um redundantes Abrufen zu vermeiden, können Sie die Ressource (Promise) zwischenspeichern und über mehrere Komponenten oder Renderings hinweg wiederverwenden. Diese Optimierung ist entscheidend für die Leistung.

            
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 ( Lade Benutzerdaten...
}> ); } export default App;

In diesem Beispiel:

2. Verwendung von use: mit Server-Komponenten

Der use:-Hook ist besonders nützlich in React Server Components, wo der Datenabruf direkt auf dem Server durchgeführt werden kann. Dies führt zu schnelleren anfänglichen Seitenladezeiten und einer verbesserten SEO.

Beispiel mit einer 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}

); }

In dieser Next.js Server Component ruft die fetchUser-Funktion Benutzerdaten auf dem Server ab. Der use:-Hook setzt die Komponente aus, bis die Daten verfügbar sind, was ein effizientes serverseitiges Rendering ermöglicht.

Best Practices für use:

Praxisbeispiele

1. E-Commerce-Produktauflistung

Stellen Sie sich eine E-Commerce-Website vor, die Produktlisten anzeigt. Jede Produktkarte kann use: verwenden, um Produktdetails abzurufen:

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

Dieser Ansatz stellt sicher, dass jede Produktkarte unabhängig lädt und das gesamte Seitenrendering nicht durch langsam ladende Produkte blockiert wird. Der Benutzer sieht für jedes Produkt einzelne Ladeindikatoren, was zu einer besseren Erfahrung führt.

2. Social-Media-Feed

Ein Social-Media-Feed kann use: verwenden, um Benutzerprofile, Beiträge und Kommentare abzurufen:

            
// 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}

Lade Kommentare...
}>
); } export default Post;

Dieses Beispiel verwendet verschachtelte Suspense-Grenzen, um den Beitragsinhalt und die Kommentare unabhängig voneinander zu laden. Der Benutzer kann den Beitragsinhalt sehen, während die Kommentare noch laden.

Häufige Fallstricke und wie man sie vermeidet

Alternativen zu use:

Obwohl use: erhebliche Vorteile bietet, gibt es alternative Ansätze für den Datenabruf in React:

Die Wahl zwischen diesen Alternativen hängt von der Komplexität Ihrer Anwendung und Ihren spezifischen Anforderungen ab. Für einfache Datenabrufszenarien kann use: eine großartige Option sein. Für komplexere Szenarien sind Bibliotheken wie useSWR oder React Query möglicherweise besser geeignet.

Fazit

Der use:-Hook in React bietet eine leistungsstarke und deklarative Möglichkeit, das Laden von Ressourcen und den Datenabruf zu handhaben. Durch die Nutzung von use: mit Suspense können Sie Ihre Komponentenlogik vereinfachen, die Benutzererfahrung verbessern und die Leistung optimieren. Dieser Leitfaden hat die Grundlagen, fortgeschrittenen Techniken und Best Practices für die Verwendung von use: in Ihren React-Anwendungen behandelt. Indem Sie diesen Richtlinien folgen, können Sie asynchrone Operationen effektiv verwalten und robuste, leistungsstarke und benutzerfreundliche Anwendungen erstellen. Da sich React ständig weiterentwickelt, ist die Beherrschung von Techniken wie use: unerlässlich, um immer einen Schritt voraus zu sein und außergewöhnliche Benutzererfahrungen zu liefern.

Ressourcen