¿Para qué se utiliza el componente Image de Nextjs?
El componente de Nextjs permite mostrar imágenes optimizadas de acuerdo a la resolución de pantalla que el usuario este utilizando. También tiene otras ventajas sobre la etiqueta como mostrar una imagen de mejor calidad cuando la imagen se esta escalando a la resolución deseada.
-
Actualizamos el componente
CreatePostWizard
utilizando el componenteImage
de Nextjs.const CreatePostWizard = () => { // ... return ( <div className="flex w-full gap-3"> <Image src={user.imageUrl} width={120} height={120} alt="Profile image" className="h-14 w-14 rounded-full" /> <input placeholder="Type some emojis" className="grow bg-transparent outline-none" /> </div> ) }
De igual manera actualizamos el componente
PostView
de Nextjs.const PostView = (props: PostWithUser) => { return ( <div key={`post-${props.post.id}`} className="flex w-full gap-3 border-b border-slate-400 p-8" > <Image src={props.author?.imageUrl ?? ''} width={120} height={120} alt="Profile image" className="h-14 w-14 rounded-full" /> ... </div> ) }
Al momento de intentar utilizar el componente Image con imágenes externas, descubriremos que se genera un error dentro de Nextjs, y esto es debido a que debemos indicar la lista de dominios de los cuales deseamos permitir que se copie la image y se genere una versión optimizada.
-
Abrimos el archivo next.config.mjs y agregamos el dominio img.clerk.com que es donde clerk almacena las imágenes de los perfiles de usuario.
await import('./src/env.mjs') const config = { reactStrictMode: true, images: { domains: ['img.clerk.com'], }, // .. } export default config
Como podemos ver domains es un arreglo, por lo que podemos incluir dominios adicionales que interactúen con el componente Image.
-
Empujamos los cambios a GitHub para que Vercel realice el despliegue de la aplicación en producción.
git add next.config.mjs src/pages/index.tsx git commit -m "Reemplazadas las etiquetas picture/img por el componente Image de Nextjs" git push -all
-
Revisa la aplicación desplegada en Vercel y que las imágenes estén debidamente optimizadas para las distintas resoluciones.
La etiqueta
Image
de Nextjs nos ha permitido utilizar una sola referencia a las imágenes y esta ha podido ser optimizada para diferentes dispositivos con diferentes resoluciones. También hemos comprobado que es posible incluso optimizar imágenes que se encuentran fuera de nuestro propio dominio utilizando la configuración de Nextjs.