El Hook use: Resource de React: Una Gu铆a Completa | MLOG | MLOG}> {/* Asumiendo que este ID no existe y causar谩 un error */} ); } export default App;

En este ejemplo, si la funci贸n fetchUser lanza un error (por ejemplo, debido a un estado 404), el componente ErrorBoundary capturar谩 el error y mostrar谩 la interfaz de usuario de fallback. El fallback puede ser cualquier componente de React, como un mensaje de error o un bot贸n de reintento.

T茅cnicas Avanzadas con use:

1. Almacenamiento en Cach茅 de Recursos

Para evitar la obtenci贸n redundante, puedes almacenar en cach茅 el recurso (Promesa) y reutilizarlo en m煤ltiples componentes o renderizaciones. Esta optimizaci贸n es crucial para el rendimiento.

            
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 ( Cargando datos del usuario...
}> ); } export default App;

En este ejemplo:

2. Usando use: con Componentes de Servidor

El hook use: es particularmente 煤til en los Componentes de Servidor de React, donde la obtenci贸n de datos se puede realizar directamente en el servidor. Esto resulta en cargas de p谩gina iniciales m谩s r谩pidas y una mejor SEO.

Ejemplo con un Componente de Servidor de Next.js

            
// app/user/[id]/page.jsx (Componente de Servidor en 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}

); }

En este componente de servidor de Next.js, la funci贸n fetchUser obtiene datos de usuario en el servidor. El hook use: suspende el componente hasta que los datos est茅n disponibles, lo que permite una renderizaci贸n eficiente del lado del servidor.

Mejores Pr谩cticas para use:

Ejemplos del Mundo Real

1. Listado de Productos de Comercio Electr贸nico

Imagina un sitio web de comercio electr贸nico que muestra listados de productos. Cada tarjeta de producto puede usar use: para obtener los detalles del producto:

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

Precio: ${product.price}

); } function ProductList({ productIds }) { return (
{productIds.map((productId) => ( Cargando producto...
}> ))}
); } export default ProductList;

Este enfoque asegura que cada tarjeta de producto se cargue independientemente, y el renderizado general de la p谩gina no se bloquee por productos de carga lenta. El usuario ve indicadores de carga individuales para cada producto, lo que proporciona una mejor experiencia.

2. Feed de Redes Sociales

Un feed de redes sociales puede usar use: para obtener perfiles de usuario, publicaciones y comentarios:

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

Cargando comentarios...
}>
); } export default Post;

Este ejemplo usa l铆mites de Suspense anidados para cargar el contenido de la publicaci贸n y los comentarios independientemente. El usuario puede ver el contenido de la publicaci贸n mientras los comentarios a煤n se est谩n cargando.

Errores Comunes y C贸mo Evitarlos

Alternativas a use:

Si bien use: ofrece beneficios significativos, existen enfoques alternativos para la obtenci贸n de datos en React:

La elecci贸n entre estas alternativas depende de la complejidad de tu aplicaci贸n y tus requisitos espec铆ficos. Para escenarios simples de obtenci贸n de datos, use: puede ser una excelente opci贸n. Para escenarios m谩s complejos, bibliotecas como useSWR o React Query pueden ser m谩s apropiadas.

Conclusi贸n

El hook use: en React proporciona una forma poderosa y declarativa de manejar la carga de recursos y la obtenci贸n de datos. Al aprovechar use: con Suspense, puedes simplificar la l贸gica de tu componente, mejorar la experiencia del usuario y optimizar el rendimiento. Esta gu铆a ha cubierto los fundamentos, las t茅cnicas avanzadas y las mejores pr谩cticas para usar use: en tus aplicaciones de React. Al seguir estas pautas, puedes gestionar eficazmente las operaciones as铆ncronas y construir aplicaciones robustas, de alto rendimiento y f谩ciles de usar. A medida que React contin煤a evolucionando, dominar t茅cnicas como use: se vuelve esencial para mantenerse a la vanguardia y ofrecer experiencias de usuario excepcionales.

Recursos