Το hook use: της React: Ένας Ολοκληρωμένος Οδηγός | MLOG | MLOG}> {/* Assuming this ID doesn't exist and will cause an error */} ); } export default App;

Σε αυτό το παράδειγμα, εάν η συνάρτηση fetchUser προκαλέσει σφάλμα (π.χ., λόγω κατάστασης 404), το component ErrorBoundary θα πιάσει το σφάλμα και θα εμφανίσει το fallback UI. Το fallback μπορεί να είναι οποιοδήποτε component της React, όπως ένα μήνυμα σφάλματος ή ένα κουμπί επανάληψης.

Προηγμένες Τεχνικές με το use:

1. Προσωρινή Αποθήκευση (Caching) Πόρων

Για να αποφύγετε την περιττή ανάκτηση δεδομένων, μπορείτε να αποθηκεύσετε προσωρινά τον πόρο (Promise) και να τον επαναχρησιμοποιήσετε σε πολλαπλά components ή αποδόσεις. Αυτή η βελτιστοποίηση είναι κρίσιμη για την απόδοση.

            
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;

Σε αυτό το παράδειγμα:

2. Χρήση του use: με Server Components

Το hook use: είναι ιδιαίτερα χρήσιμο στα React Server Components, όπου η ανάκτηση δεδομένων μπορεί να πραγματοποιηθεί απευθείας στον server. Αυτό έχει ως αποτέλεσμα ταχύτερες αρχικές φορτώσεις σελίδων και βελτιωμένο SEO.

Παράδειγμα με 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}

); }

Σε αυτό το server component του Next.js, η συνάρτηση fetchUser ανακτά δεδομένα χρήστη στον server. Το hook use: αναστέλλει το component μέχρι να είναι διαθέσιμα τα δεδομένα, επιτρέποντας την αποδοτική απόδοση από την πλευρά του server (server-side rendering).

Βέλτιστες Πρακτικές για το use:

Παραδείγματα από τον Πραγματικό Κόσμο

1. Λίστα Προϊόντων E-commerce

Φανταστείτε έναν ιστότοπο ηλεκτρονικού εμπορίου που εμφανίζει λίστες προϊόντων. Κάθε κάρτα προϊόντος μπορεί να χρησιμοποιήσει το use: για να ανακτήσει τις λεπτομέρειες του προϊόντος:

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

Αυτή η προσέγγιση διασφαλίζει ότι κάθε κάρτα προϊόντος φορτώνει ανεξάρτητα και η συνολική απόδοση της σελίδας δεν εμποδίζεται από προϊόντα που φορτώνουν αργά. Ο χρήστης βλέπει μεμονωμένους δείκτες φόρτωσης για κάθε προϊόν, παρέχοντας μια καλύτερη εμπειρία.

2. Ροή Social Media

Μια ροή κοινωνικών μέσων μπορεί να χρησιμοποιήσει το use: για να ανακτήσει προφίλ χρηστών, αναρτήσεις και σχόλια:

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

Αυτό το παράδειγμα χρησιμοποιεί ένθετα Suspense boundaries για να φορτώσει το περιεχόμενο της ανάρτησης και τα σχόλια ανεξάρτητα. Ο χρήστης μπορεί να δει το περιεχόμενο της ανάρτησης ενώ τα σχόλια εξακολουθούν να φορτώνουν.

Συνηθισμένες Παγίδες και Πώς να τις Αποφύγετε

Εναλλακτικές του use:

Ενώ το use: προσφέρει σημαντικά οφέλη, υπάρχουν εναλλακτικές προσεγγίσεις για την ανάκτηση δεδομένων στη React:

Η επιλογή μεταξύ αυτών των εναλλακτικών εξαρτάται από την πολυπλοκότητα της εφαρμογής σας και τις συγκεκριμένες απαιτήσεις σας. Για απλά σενάρια ανάκτησης δεδομένων, το use: μπορεί να είναι μια εξαιρετική επιλογή. Για πιο σύνθετα σενάρια, βιβλιοθήκες όπως το useSWR ή το React Query μπορεί να είναι πιο κατάλληλες.

Συμπέρασμα

Το hook use: στη React παρέχει έναν ισχυρό και δηλωτικό τρόπο διαχείρισης της φόρτωσης πόρων και της ανάκτησης δεδομένων. Αξιοποιώντας το use: με το Suspense, μπορείτε να απλοποιήσετε τη λογική των component σας, να βελτιώσετε την εμπειρία του χρήστη και να βελτιστοποιήσετε την απόδοση. Αυτός ο οδηγός κάλυψε τα θεμελιώδη στοιχεία, τις προηγμένες τεχνικές και τις βέλτιστες πρακτικές για τη χρήση του use: στις εφαρμογές σας React. Ακολουθώντας αυτές τις οδηγίες, μπορείτε να διαχειριστείτε αποτελεσματικά τις ασύγχρονες λειτουργίες και να δημιουργήσετε στιβαρές, αποδοτικές και φιλικές προς το χρήστη εφαρμογές. Καθώς η React συνεχίζει να εξελίσσεται, η κατάκτηση τεχνικών όπως το use: καθίσταται απαραίτητη για να παραμένετε μπροστά και να προσφέρετε εξαιρετικές εμπειρίες χρήστη.

Πόροι