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

85
Vistas
Galería de reacción con filtro de categoría y scroll infinito

Uso react-photoswipe-gallery para renderizar algunas imágenes para una página de portafolio. También hice una funcionalidad de desplazamiento infinito para que solo cargue 10 elementos inicialmente. Ahora funciona según el botón y agrega 10 elementos más al hacer clic, pero planeo cambiarlo para que se desplace. Todo funciona según lo previsto hasta este punto, así es como funciona la galería y el pergamino infinito:

 const loadLimit = 10; const [galleryItems, setGalleryItems] = useState( galleryData.slice(0, loadLimit) ); const [visibleItems, setVisibleItems] = useState(loadLimit); const [selectedOption, setSelectedOption] = useState([]); const loadMore = () => { const newVisible = visibleItems + loadLimit; const newItems = galleryItems.concat( galleryData.slice(visibleItems, newVisible) ); setVisibleItems(newVisible); setGalleryItems(newItems); };

Dado que habrá muchas imágenes, también me gustaría agregar un filtro de categoría usando la selección de reacción con isMulti habilitado. Por lo que he comprobado en la consola, me dirijo a las cosas correctas, la categoría está configurada correctamente. Solo funciona cuando no se selecciona nada, mostrando todas las imágenes de cualquier tipo de categoría. Una vez que selecciono una categoría, necesito hacer clic en el botón Cargar más y muestra todas las imágenes disponibles nuevamente, no por categoría.

 useEffect(() => { if (selectedOption.length === 0) return setGalleryItems(galleryData.slice(0, loadLimit)); const filteredData = galleryData .filter((item) => item.category === selectedOption.value) .slice(0, loadLimit); setGalleryItems(filteredData); }, [galleryItems, selectedOption]); <Select components={makeAnimated()} options={filterOptions} value={selectedOption} onChange={setSelectedOption} placeholder="Filter by category" isMulti />

selectedOptions es una matriz simple con los nombres de las categorías.

galleryItems es una matriz de objetos estructurados de la siguiente manera:

 { source: imageSource, category: 'category-name' }
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Si esa primera declaración if es verdadera, recibirá las imágenes sin filtrar, y en esa declaración está comparando con selectedOption.length pero luego usando selectedOption.value . Sospecho que es un error, excepto que (undefined === 0) equivale a falso, por lo que también puede estar sucediendo algo más.

Además, carga más código configurando los elementos de la galería sin tener en cuenta el filtro. Y cuando cargue más llamadas "setGalleryItems ()", puede activar su gancho useEffect () para que se ejecute nuevamente, lo que luego aplastará la galería.

Por lo general, el código 'cargar siguiente' simplemente mostrará el número de página y nada más. El número de página será una dependencia del gancho useState() (no de los datos de la página), y dentro del gancho useState() llene la galería con los datos de la página correcta.

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