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

166
Vistas
Next/image no carga mi imagen src cuando uso un mapa

Uso next/image para cargar mis imágenes en mi aplicación. Funciona bien excepto por un carrusel con múltiples imágenes. Cuando me gusta esto tengo ese error:

Error: Falta la propiedad "src" requerida en la imagen. Asegúrese de pasar "src" en props al componente next/image . Recibió: {}

El problema no es porque tengo una entidad sin ningún archivo

imagen.js

 import { getStrapiMedia } from "../utils/medias" import NextImage from "next/image" const Image = (props) => { if (!props.media) { return <NextImage {...props} /> } const { url, alternativeText } = props.media const loader = ({ src }) => { return getStrapiMedia(src) } return ( <NextImage loader={loader} layout="responsive" objectFit="contain" width={props.media.width} height={props.media.height} src={url} alt={alternativeText || ""} /> ) } export default Image

Carrusel.js

 import React, { useCallback } from "react" import useEmblaCarousel from "embla-carousel-react" import NextImage from "./Image" export const EmblaCarousel = (product) => { const [emblaRef, emblaApi] = useEmblaCarousel() useEmblaCarousel.globalOptions = { loop: true } const scrollPrev = useCallback(() => { if (emblaApi) emblaApi.scrollPrev() }, [emblaApi]) const scrollNext = useCallback(() => { if (emblaApi) emblaApi.scrollNext() }, [emblaApi]) return ( <div className="embla" ref={emblaRef}> <div className="embla__container"> {product.gallery.map((_gallery) => ( <div key={_gallery.id}> <NextImage media={_gallery.image} className="embla__slide" /> </div> ))} </div> <button className="hidden md:inline embla__prev mr-2" onClick={scrollPrev} > Prev </button> <button className="hidden md:inline embla__next ml-2" onClick={scrollNext} > Next </button> </div> ) } export default EmblaCarousel
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

el problema es

 if (!props.media) { return <NextImage {...props} /> }

en su componente de imagen personalizado. Cuando el accesorio de media es falso como undefined o null , está pasando todo lo demás a NextImage pero todo lo demás no incluye el accesorio src , que es obligatorio para el siguiente componente de imagen. Además, la extracción de su url depende de que la propiedad media sea veraz y tenga una propiedad llamada url . Se puede ver en la siguiente línea: -

const { url, alternativeText } = props.media

Y tiene la intención de pasar esta url a src como se puede ver en su uso. Puede devolver null cuando media son falsos o puede filtrar aquellos elementos en su lista donde media son falsos y luego mapearlos .

about 4 years ago · Juan Pablo Isaza Denunciar

0

Reemplazar NextImage con Image

 import { getStrapiMedia } from "../utils/medias" import Image from "next/image" const NextImage = (props) => { if (!props.media) { return <Image {...props} /> } const { url, alternativeText } = props.media const loader = ({ src }) => { return getStrapiMedia(src) } return ( <Image loader={loader} layout="responsive" objectFit="contain" width={props.media.width} height={props.media.height} src={url} alt={alternativeText || ""} /> ) } export default NextImage

Carrusel.js

 import React, { useCallback } from "react" import useEmblaCarousel from "embla-carousel-react" import NextImage from "./Image" export const EmblaCarousel = (product) => { const [emblaRef, emblaApi] = useEmblaCarousel() useEmblaCarousel.globalOptions = { loop: true } const scrollPrev = useCallback(() => { if (emblaApi) emblaApi.scrollPrev() }, [emblaApi]) const scrollNext = useCallback(() => { if (emblaApi) emblaApi.scrollNext() }, [emblaApi]) return ( <div className="embla" ref={emblaRef}> <div className="embla__container"> {product.gallery.map((_gallery) => ( <div key={_gallery.id}> <NextImage media={_gallery.image} className="embla__slide" /> </div> ))} </div> <button className="hidden md:inline embla__prev mr-2" onClick={scrollPrev} > Prev </button> <button className="hidden md:inline embla__next ml-2" onClick={scrollNext} > Next </button> </div> ) } export default EmblaCarousel
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