Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

97
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!