Introducción a React y Preparación del Entorno

1

Aprende React: Desarrollo Web y Mobile Eficiente y Escalable

Fundamentos de Componentes y JSX

2

Creación de Componentes con JavaScript y React

3

Creación de Componentes Reutilizables con Props en React

Quiz: Fundamentos de Componentes y JSX

Manejo del Estado y Hooks Básicos

4

Estado Local en React: Uso de useState para Contadores

5

Creación y manejo de estados en un Toggle Button con React

6

Eventos y manejo de estado en React: name form interactivo

7

Uso de useEffect para Manejar Efectos Secundarios en React

Quiz: Manejo del Estado y Hooks Básicos

Estilización de Componentes

8

Estilos en React: CSS, SaaS y Módulos CSS

9

Estilos en Línea en React: Uso y Mejores Prácticas

10

Creación de Botones Reactivos con Styled Components en React

11

Instalación y Uso de Tailwind CSS en Proyectos Web

Quiz: Estilización de Componentes

Trabajo con Datos y APIs

12

Creación de Componentes con Datos Estáticos en React

13

Creación de un Componente User List con Fetch en React

14

Manejo de Errores y Carga en Fetch para Componentes React

15

Optimización de Fetch con useEffect y Dependencias en React

Quiz: Trabajo con Datos y APIs

Componentes Avanzados y Estado Global

16

Manejo de estados complejos en React con useReducer

17

Context API en React: Manejo de Estados Globales y Proveedores

18

Creación de Hooks Personalizados en React para Contadores Reutilizables

19

Optimización de Componentes en React con React.memo y Hooks

Quiz: Componentes Avanzados y Estado Global

Introducción a TypeScript en React

20

Componentes con TypeScript en React: Tipado de Props y Funciones

21

Tipado de Estados y Funciones en TypeScript para React

22

Tipado de useReducer y Context API en TypeScript

Quiz: Introducción a TypeScript en React

Nuevas Características de React 19

23

Novedades y Mejoras en React 19 para Desarrolladores

24

Fundamentos y Actualización Continua en React

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de React.js

Curso de React.js

Estefany Aguilar

Estefany Aguilar

Optimización de Fetch con useEffect y Dependencias en React

15/24
Recursos

La capacidad de crear aplicaciones web interactivas que respondan a las acciones del usuario en tiempo real es una habilidad fundamental para cualquier desarrollador de React. El uso efectivo de hooks como useEffect con dependencias nos permite optimizar nuestras aplicaciones, realizando llamadas a APIs solo cuando es necesario. Esta técnica no solo mejora el rendimiento, sino que también proporciona una experiencia de usuario más fluida y responsiva.

¿Cómo crear un buscador en React utilizando useEffect con dependencias?

Cuando desarrollamos aplicaciones que requieren búsquedas en tiempo real, necesitamos implementar un sistema que realice peticiones a una API solo cuando el usuario interactúa con la interfaz. En React, esto se logra combinando el estado local con el hook useEffect y sus dependencias. Vamos a explorar cómo crear un buscador que filtre posts según lo que el usuario escriba en un campo de entrada.

Configuración inicial del componente

Para comenzar, necesitamos crear un componente funcional que maneje tanto la entrada del usuario como los resultados de la búsqueda:

import React, { useState, useEffect } from 'react';

const SearchPost = () => {
  const [query, setQuery] = useState('');
  const [posts, setPosts] = useState([]);

  // Aquí irá nuestro useEffect

  return (
    <div>
      <h2>Lista de usuarios</h2>
      {/* Aquí irá nuestro input y la lista de resultados */}
    </div>
  );
};

export default SearchPost;

En este componente, hemos definido dos estados:

  • query: almacena el texto que el usuario escribe en el campo de búsqueda
  • posts: guarda los resultados obtenidos de la API

Implementación del useEffect con dependencias

El corazón de nuestro buscador es el hook useEffect que realizará las peticiones a la API. La clave está en incluir la variable query como dependencia para que la función se ejecute cada vez que cambie su valor:

useEffect(() => {
  fetch(`https://jsonplaceholder.typicode.com/posts?title=${query}`)
    .then(response => response.json())
    .then(data => setPosts(data));
}, [query]);

Este código realiza una petición a la API de JSONPlaceholder cada vez que el valor de query cambia. La URL incluye un parámetro de consulta que filtra los posts por título según lo que el usuario haya escrito.

Creación del input y visualización de resultados

Ahora necesitamos un campo de entrada para que el usuario pueda escribir su búsqueda y una forma de mostrar los resultados:

return (
  <div>
    <h2>Lista de usuarios</h2>
    <input 
      placeholder="Buscar por título" 
      value={query} 
      onChange={(event) => setQuery(event.target.value)} 
    />
    <ul>
      {posts.map(post => (
        <li key={post.id}>{post.title}</li>
      ))}
    </ul>
  </div>
);

El input está vinculado al estado query a través de su propiedad value, y cada vez que el usuario escribe algo, el evento onChange actualiza el estado con el nuevo valor. Esto desencadena la ejecución del useEffect, que realiza una nueva petición a la API.

¿Por qué es importante utilizar dependencias en useEffect?

Las dependencias en useEffect son fundamentales para controlar cuándo se ejecuta el código dentro del hook. Sin ellas, podríamos enfrentar varios problemas:

Optimización de rendimiento

Si no especificamos dependencias (dejando un array vacío), el efecto solo se ejecutaría una vez al montar el componente, lo que significa que nuestro buscador no respondería a los cambios en la entrada del usuario.

Por otro lado, si omitimos completamente el array de dependencias, el efecto se ejecutaría después de cada renderizado, lo que podría causar un exceso de peticiones innecesarias a la API.

Control preciso de las actualizaciones

Al incluir query como dependencia, nos aseguramos de que la petición a la API solo se realice cuando realmente necesitamos nuevos datos: cuando el usuario ha modificado su búsqueda.

useEffect(() => {
  // Este código solo se ejecuta cuando query cambia
  // ...
}, [query]);

Monitoreo de las peticiones

Para verificar que nuestras peticiones se están realizando correctamente, podemos utilizar las herramientas de desarrollo del navegador:

  1. Abre la consola de desarrollador (F12 o clic derecho > Inspeccionar)
  2. Ve a la pestaña "Network"
  3. Escribe en el campo de búsqueda y observa cómo se generan nuevas peticiones

Esto nos permite confirmar que las peticiones solo se realizan cuando cambia el valor de query, optimizando así el uso de recursos.

¿Cómo funciona el flujo de datos en nuestro buscador?

El flujo de datos en nuestra aplicación sigue un patrón claro:

  1. El usuario escribe en el campo de entrada
  2. El evento onChange actualiza el estado query
  3. El cambio en query desencadena el useEffect
  4. Se realiza una petición a la API con el nuevo valor de búsqueda
  5. Los datos recibidos actualizan el estado posts
  6. El componente se vuelve a renderizar mostrando los nuevos resultados

Este flujo unidireccional es una de las fortalezas de React, ya que hace que el comportamiento de nuestra aplicación sea predecible y fácil de depurar.

La combinación de useState y useEffect con dependencias nos permite crear interfaces reactivas que responden a las acciones del usuario de manera eficiente, realizando operaciones costosas como las peticiones a APIs solo cuando es realmente necesario.

¿Has implementado buscadores en tiempo real en tus proyectos? ¿Qué otras optimizaciones has utilizado para mejorar la experiencia de usuario? Comparte tus experiencias en los comentarios.

Aportes 5

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

La clase se centra en la optimización de llamadas a APIs usando `useEffect` en React. A continuación, un tutorial paso a paso: ### 1. Crear el Componente - Crea una carpeta llamada `searchPost` y un archivo `SearchPost.js`. ```javascript const SearchPost = () => { const [query, setQuery] = useState(''); const [posts, setPosts] = useState([]); ``` ### 2. Efecto de `useEffect` - Usa `useEffect` para realizar la llamada a la API cuando `query` cambie. ```javascript useEffect(() => { if (query) { fetch(`https://jsonplaceholder.typicode.com/posts?title=${query}`) .then(response => response.json()) .then(data => setPosts(data)); } }, [query]); ``` ### 3. Manejo del Input - Crea un input para capturar el texto del usuario. ```javascript return (
<input type="text" placeholder="Buscar por título" value={query} onChange={(e) => setQuery(e.target.value)} />
    {posts.map(post => (
  • {post.title}
  • ))}
); ``` ### 4. Prueba la Aplicación - Al escribir en el input, la llamada a la API se activará y se actualizará la lista de posts. Este tutorial cubre la creación de un buscador básico utilizando `useEffect` y gestión de estado en React.
Aunque todo funciona, en el código hay un pqueño error, cuando hace `posts.map(...)` vuelve a poner el mismo nombre de variable a cada elemento del `array` quedando `posts.map(posts => ...)` lo que podría desencadenar en un error. Dentro del map, debería ser singular `post` como lo hizo con users.
¿Es correcto hacer una petición a la api por cada ves que se escribe una letra? me parece demasiadas peticiones. Creo que lo mejor seria hacer un debouncing o una copia de la data de la api?
**Cómo hacer una búsqueda en React que solo se dispare al presionar Enter o hacer clic en un botón "Buscar"** ### 1. Usa dos estados Uno guarda el texto del input y otro activa la búsqueda. `const [input, setInput] = useState('');` `const [query, setQuery] = useState('');` 2\. Input controlado con detección de "Enter" `<input` ` type="text"` ` placeholder="Buscar por título"` ` value={input}` ` onChange={(e) => setInput(e.target.value)}` ` onKeyDown={(e) => {` ` if (e.key === 'Enter') {` ` setQuery(input); // Solo busca cuando presiona Enter` ` }` ` }}` `/>` 3\. Botón para buscar manualmente `<button onClick={() => setQuery(input)}>` ` Buscar` `</button>` 4\. El efecto (`useEffect`) se dispara **solo cuando cambia** `query`: `useEffect(() => {` ` if (query) {` `` fetch(`https://jsonplaceholder.typicode.com/posts?title_like=${query}`)`` ` .then(res => res.json())` ` .then(data => setPosts(data));` ` }` `}, [query]);`
Esta api no está respondiendo nada, siempre, con cualquier query que envíe, responde un array vacío.