# Image The `Image` component renders an image for the Storefront API's [Image object](https://shopify.dev/api/storefront/reference/common-objects/image) by using the `data` prop. You can [customize this component](https://shopify.dev/api/hydrogen/components#customizing-hydrogen-components) using passthrough props. Images default to being responsive automatically (`width: 100%, height: auto`), and expect an `aspectRatio` prop, which ensures your image doesn't create any layout shift. For fixed-size images, you can set `width` to an exact value, and a `srcSet` with 1x, 2x, and 3x DPI variants will automatically be generated for you. ### Example code ```jsx import {Image} from '@shopify/hydrogen'; // An example query const IMAGE_QUERY = `#graphql query { product { featuredImage { altText url height width } } } `; export default function ProductImage({product}) { if (!product.featuredImage) { return null; } return ( <Image data={product.featuredImage} sizes="(min-width: 45em) 50vw, 100vw" aspectRatio="4/5" /> ); } ``` ```tsx import React from 'react'; import {Image} from '@shopify/hydrogen'; import type {Product} from '@shopify/hydrogen/storefront-api-types'; // An example query const IMAGE_QUERY = `#graphql query { product { featuredImage { altText url height width } } } `; export default function ProductImage({product}: {product: Product}) { if (!product.featuredImage) { return null; } return ( <Image data={product.featuredImage} sizes="(min-width: 45em) 50vw, 100vw" aspectRatio="4/5" /> ); } ``` ## Props ### HydrogenImageBaseProps ### aspectRatio value: `string` The aspect ratio of the image, in the format of `width/height`. ### crop value: `Crop` The crop position of the image. ### data value: `PartialDeep<ImageType, {recurseIntoArrays: true}>` Data mapping to the [Storefront API `Image`](https://shopify.dev/docs/api/storefront/2023-07/objects/Image) object. Must be an Image object. ### loader value: `Loader` A function that returns a URL string for an image. ### srcSetOptions value: `SrcSetOptions` An optional prop you can use to change the default srcSet generation behaviour ### loaderOptions value: `ShopifyLoaderOptions` ### widths value: `(string | number)[]` ### Crop 'center' | 'top' | 'bottom' | 'left' | 'right' ### Loader #### Returns: string #### Params: - params: LoaderParams export type Loader = (params: LoaderParams) => string; ### LoaderParams ### src value: `string` The base URL of the image ### width value: `number` The URL param that controls width ### height value: `number` The URL param that controls height ### crop value: `Crop` The URL param that controls the cropping region ### SrcSetOptions ### intervals value: `number` The number of sizes to generate ### startingWidth value: `number` The smallest image size ### incrementSize value: `number` The increment by which to increase for each size, in pixels ### placeholderWidth value: `number` The size used for placeholder fallback images ### ShopifyLoaderOptions Legacy type for backwards compatibility * ### src value: `string` The base URL of the image ### width value: `string | number` The URL param that controls width ### height value: `string | number` The URL param that controls height ### crop value: `Crop` The URL param that controls the cropping region ## Related - [MediaFile](/api/hydrogen/components/mediafile)