React Hook use: Komplexní průvodce | MLOG | MLOG}> {/* Assuming this ID doesn't exist and will cause an error */} ); } export default App;

V tomto příkladu, pokud funkce fetchUser vyvolá chybu (např. kvůli stavu 404), komponenta ErrorBoundary chybu zachytí a zobrazí fallback UI. Fallback může být jakákoli React komponenta, například chybová zpráva nebo tlačítko pro opakování.

Pokročilé techniky s use:

1. Cachování zdrojů

Abyste se vyhnuli zbytečnému načítání, můžete zdroj (Promise) cachovat a znovu ho použít ve více komponentách nebo při více vykresleních. Tato optimalizace je klíčová pro výkon.

            
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;

V tomto příkladu:

2. Použití use: se serverovými komponentami

Hook use: je obzvláště užitečný v React Server Components, kde lze načítání dat provádět přímo na serveru. To vede k rychlejšímu počátečnímu načtení stránky a lepšímu SEO.

Příklad se serverovou komponentou v 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}

); }

V této serverové komponentě Next.js načítá funkce fetchUser data uživatele na serveru. Hook use: pozastaví komponentu, dokud nejsou data k dispozici, což umožňuje efektivní server-side rendering.

Osvědčené postupy pro use:

Příklady z praxe

1. Výpis produktů v e-shopu

Představte si e-shop zobrazující výpis produktů. Každá karta produktu může používat use: k načtení detailů produktu:

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

Tento přístup zajišťuje, že se každá karta produktu načítá nezávisle a celkové vykreslení stránky není blokováno pomalu se načítajícími produkty. Uživatel vidí individuální indikátory načítání pro každý produkt, což poskytuje lepší zážitek.

2. Feed sociálních médií

Feed sociálních médií může používat use: k načítání profilů uživatelů, příspěvků a komentářů:

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

Tento příklad používá vnořené hranice Suspense k nezávislému načítání obsahu příspěvku a komentářů. Uživatel může vidět obsah příspěvku, zatímco se komentáře stále načítají.

Běžné nástrahy a jak se jim vyhnout

Alternativy k use:

Ačkoli use: nabízí významné výhody, existují alternativní přístupy k načítání dat v Reactu:

Volba mezi těmito alternativami závisí na složitosti vaší aplikace a vašich specifických požadavcích. Pro jednoduché scénáře načítání dat může být use: skvělou volbou. Pro složitější scénáře mohou být vhodnější knihovny jako useSWR nebo React Query.

Závěr

Hook use: v Reactu poskytuje mocný a deklarativní způsob, jak zpracovávat načítání zdrojů a dat. Využitím use: se Suspense můžete zjednodušit logiku komponent, zlepšit uživatelský zážitek a optimalizovat výkon. Tento průvodce pokryl základy, pokročilé techniky a osvědčené postupy pro používání use: ve vašich React aplikacích. Dodržováním těchto pokynů můžete efektivně spravovat asynchronní operace a vytvářet robustní, výkonné a uživatelsky přívětivé aplikace. S dalším vývojem Reactu se zvládnutí technik jako use: stává nezbytným pro udržení náskoku a poskytování výjimečných uživatelských zážitků.

Zdroje