Hook-ul use: din React: Un Ghid Complet | MLOG | MLOG}> {/* Assuming this ID doesn't exist and will cause an error */} ); } export default App;

În acest exemplu, dacă funcția fetchUser aruncă o eroare (de ex., din cauza unui status 404), componenta ErrorBoundary va prinde eroarea și va afișa interfața de rezervă. Fallback-ul poate fi orice componentă React, cum ar fi un mesaj de eroare sau un buton de reîncercare.

Tehnici Avansate cu use:

1. Stocarea în Cache a Resurselor

Pentru a evita preluările redundante, puteți stoca în cache resursa (Promise) și o puteți reutiliza în mai multe componente sau randări. Această optimizare este crucială pentru performanță.

            
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;

În acest exemplu:

2. Utilizarea use: cu Server Components

Hook-ul use: este deosebit de util în React Server Components, unde preluarea datelor poate fi efectuată direct pe server. Acest lucru duce la încărcări inițiale mai rapide ale paginii și la un SEO îmbunătățit.

Exemplu cu un Server Component Next.js

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

); }

În această componentă de server Next.js, funcția fetchUser preia datele utilizatorului pe server. Hook-ul use: suspendă componenta până când datele sunt disponibile, permițând o randare eficientă pe partea de server (server-side rendering).

Cele mai Bune Practici pentru use:

Exemple din Lumea Reală

1. Listarea Produselor într-un Magazin Online

Imaginați-vă un site de comerț electronic care afișează liste de produse. Fiecare card de produs poate folosi use: pentru a prelua detaliile produsului:

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

Această abordare asigură că fiecare card de produs se încarcă independent, iar randarea generală a paginii nu este blocată de produsele care se încarcă lent. Utilizatorul vede indicatori de încărcare individuali pentru fiecare produs, oferind o experiență mai bună.

2. Flux de Știri pe o Rețea de Socializare

Un flux de știri de pe o rețea de socializare poate folosi use: pentru a prelua profiluri de utilizatori, postări și comentarii:

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

Acest exemplu folosește limite de suspensie (Suspense boundaries) imbricate pentru a încărca conținutul postării și comentariile în mod independent. Utilizatorul poate vedea conținutul postării în timp ce comentariile încă se încarcă.

Greșeli Comune și Cum să le Evitați

Alternative la use:

Deși use: oferă beneficii semnificative, există abordări alternative pentru preluarea datelor în React:

Alegerea între aceste alternative depinde de complexitatea aplicației dumneavoastră și de cerințele specifice. Pentru scenarii simple de preluare a datelor, use: poate fi o opțiune excelentă. Pentru scenarii mai complexe, biblioteci precum useSWR sau React Query pot fi mai potrivite.

Concluzie

Hook-ul use: din React oferă o modalitate puternică și declarativă de a gestiona încărcarea resurselor și preluarea datelor. Prin utilizarea use: împreună cu Suspense, puteți simplifica logica componentelor, îmbunătăți experiența utilizatorului și optimiza performanța. Acest ghid a acoperit fundamentele, tehnicile avansate și cele mai bune practici pentru utilizarea use: în aplicațiile dumneavoastră React. Urmând aceste îndrumări, puteți gestiona eficient operațiunile asincrone și puteți construi aplicații robuste, performante și prietenoase cu utilizatorul. Pe măsură ce React continuă să evolueze, stăpânirea tehnicilor precum use: devine esențială pentru a rămâne în frunte și a oferi experiențe excepționale utilizatorilor.

Resurse