Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

99
Vistas
La función de búsqueda ahora funciona en la galería de fotos de React

Trabajando en una pequeña aplicación que toma una API de Pexels y muestra fotos de forma dinámica. Cuando envío la solicitud de búsqueda para que mi api realice la búsqueda en función de los nuevos parámetros, en realidad actualiza la página con nuevas fotos, pero no con las que se basan en los parámetros. Pensé que tenía la función de búsqueda correcta, ¿tal vez es porque no la estoy usando en un useEffect? Pero si lo usara en un useEffect, no podría configurarlo en el controlador onClick. Traté de console.log la consulta que estaba recibiendo de onChange pero no parece que esté obteniendo el resultado. ¿Qué estoy haciendo mal?

 import { useState, useEffect } from 'react' import pexelsApi from './components/pexelsApi' import './App.css' const App = () => { const [images, setImages] = useState([]); const [loading, setLoading] = useState(false); const [nextPage, setNextPage] = useState(1); const [perPage, setPerPage] = useState(25); const [query, setQuery] = useState(''); const [error, setError] = useState(''); useEffect(() => { const getImages = async () => { setLoading(true); await pexelsApi.get(`/v1/curated?page=${nextPage}&per_page=${perPage}`) .then(res => { setImages([...images, ...res.data.photos]); setLoading(false); }).catch(er => { if (er.response) { const error = er.response.status === 404 ? 'Page not found' : 'Something wrong has happened'; setError(error); setLoading(false); console.log(error); } }); } getImages(); }, [nextPage, perPage]); const handleLoadMoreClick = () => setNextPage(nextPage + 1) const search = async (query) => { setLoading(true); await pexelsApi.get(`/v1/search?query=${query}&per_page=${perPage}`) .then(res => { setImages([...res.data.photos]); console.log(res.data) setLoading(false); console.log(query) }) } if (!images) { return <div>Loading</div> } return ( <> <div> <input type='text' onChange={(event) => setQuery(event.target.value)} /> <button onClick={search}>Search</button> </div> <div className='image-grid'> {images.map((image) => <img key={image.id} src={image.src.original} alt={image.alt} />)} </div> <div className='load'> {nextPage && <button onClick={handleLoadMoreClick}>Load More Photos</button>} </div> </> ) }; export default App
 import axios from 'axios'; export default axios.create({ baseURL: `https://api.pexels.com`, headers: { Authorization: process.env.REACT_APP_API_KEY } });
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Su principal problema es que ha configurado la query como un argumento para su función de search , pero nunca pasa nada. Simplemente puede eliminar el argumento para que use el estado de query en su lugar, pero luego deberá manejar la paginación ...

 // Helper functions const getCuratedImages = () => pexelsApi.get("/v1/curated", { params: { page: nextPage, per_page: perPage } }).then(r => r.data.photos) const getSearchImages = (page = nextPage) => pexelsApi.get("/v1/search", { params: { query, page, per_page: perPage } }).then(r => r.data.photos) // initial render effect useEffect(() => { setLoading(true) getCuratedImages().then(photos => { setImages(photos) setLoading(false) }) }, []) // search onClick handler const search = async () => { setNextPage(1) setLoading(true) setImages(await getSearchImages(1)) // directly load page 1 setLoading(false) } // handle pagination parameter changes useEffect(() => { // only action for subsequent pages if (nextPage > 1) { setLoading(true) const promise = query ? getSearchImages() : getCuratedImages() promise.then(photos => { setImages([...images, ...photos]) setLoading(false) }) } }, [ nextPage ])

La razón por la que paso page = 1 en la función de search es porque setNextPage(1) no se habrá completado para la carga de la primera página.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda