Reacti use: Ressursi Hook: Põhjalik Juhend | MLOG | MLOG}> {/* Eeldades, et see ID ei eksisteeri ja põhjustab vea */} ); } export default App;

Selles näites, kui funktsioon fetchUser viskab vea (nt 404 staatuse tõttu), püüab komponent ErrorBoundary vea kinni ja kuvab tagavaraliidese. Tagavaraliides võib olla mis tahes Reacti komponent, näiteks veateade või uuesti proovimise nupp.

Edasijõudnud tehnikad use: abil

1. Ressursside vahemällu salvestamine

Üleliigse pärimise vältimiseks saate ressursi (Promise) vahemällu salvestada ja seda mitmes komponendis või renderdamisel taaskasutada. See optimeerimine on jõudluse seisukohalt ülioluline.

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

Selles näites:

2. use: kasutamine serverikomponentidega

use: hook on eriti kasulik Reacti serverikomponentides, kus andmete pärimist saab teha otse serveris. See tulemuseks on kiirem esialgne lehe laadimine ja parem SEO.

Näide Next.js serverikomponendiga

            
// app/user/[id]/page.jsx (Serverikomponent Next.js-is)
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}

); }

Selles Next.js serverikomponendis pärib funktsioon fetchUser kasutajaandmeid serveris. use: hook peatab komponendi renderdamise, kuni andmed on saadaval, võimaldades tõhusat serveripoolset renderdamist.

Parimad praktikad use: kasutamiseks

Reaalse maailma näited

1. E-kaubanduse tootenimekiri

Kujutage ette e-kaubanduse veebisaiti, mis kuvab tootenimekirju. Iga toote kaart saab kasutada use: toote detailide pärimiseks:

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

See lähenemine tagab, et iga toote kaart laaditakse iseseisvalt ja kogu lehe renderdamist ei blokeeri aeglaselt laadivad tooted. Kasutaja näeb iga toote jaoks individuaalseid laadimisindikaatoreid, pakkudes paremat kogemust.

2. Sotsiaalmeedia voog

Sotsiaalmeedia voog saab kasutada use: kasutajaprofiilide, postituste ja kommentaaride pärimiseks:

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

Kommentaaride laadimine...
}>
); } export default Post;

See näide kasutab pesastatud Suspense'i piire postituse sisu ja kommentaaride iseseisvaks laadimiseks. Kasutaja näeb postituse sisu, samal ajal kui kommentaarid alles laadivad.

Levinud lõksud ja kuidas neid vältida

Alternatiivid use:'ile

Kuigi use: pakub märkimisväärseid eeliseid, on Reactis andmete pärimiseks ka alternatiivseid lähenemisviise:

Valik nende alternatiivide vahel sõltub teie rakenduse keerukusest ja konkreetsetest nõuetest. Lihtsate andmete pärimise stsenaariumide jaoks võib use: olla suurepärane valik. Keerukamate stsenaariumide jaoks võivad sobivamad olla teegid nagu useSWR või React Query.

Kokkuvõte

use: hook Reactis pakub võimsat ja deklaratiivset viisi ressursside laadimise ja andmete pärimise haldamiseks. Kasutades use: koos Suspense'iga, saate lihtsustada oma komponendi loogikat, parandada kasutajakogemust ja optimeerida jõudlust. See juhend on käsitlenud use: kasutamise aluseid, edasijõudnud tehnikaid ja parimaid praktikaid teie Reacti rakendustes. Järgides neid juhiseid, saate tõhusalt hallata asünkroonseid operatsioone ja ehitada tugevaid, jõudsaid ja kasutajasõbralikke rakendusi. Kuna React areneb edasi, muutub tehnikate nagu use: valdamine oluliseks, et püsida eesliinil ja pakkuda erakordseid kasutajakogemusi.

Ressursid