An opinionated image component with caching for the web.
Only use this package if you are building with tailwindcss and the newest version of react.
- Install the package using pnpm:
pnpm add @wanner.work/image
. - Add the following line to your
tailwind.config.js
content configuration: (if not already present from different@wanner.work
components)"./node_modules/@wanner.work/**/*.{js,ts,jsx,tsx}"
import Image from '@wanner.work/image'
export default function MyComponent() {
return (
<Image
src="https://source.unsplash.com/random"
alt="Random image"
height={500}
width={500}
/>
)
}
2. Using the Image
component with the ImageProvider
context component somewhere above the Image
component in the component tree:
import Image, { ImageProvider } from '@wanner.work/image'
export default function MyComponent() {
return (
<ImageProvider
loader={
<div className="text-white absolute h-full w-full">Loading...</div>
}
cache={{
enabled: true,
maxAge: 1000 * 60 * 60 * 24,
keyGenerator: (src) => src.split('?')[0] || src
}}
>
<Image
src="https://source.unsplash.com/random"
alt="Random image"
height={500}
width={500}
/>
</ImageProvider>
)
}
-
src
(string): The source of the image. -
options?
(useImageOptions?): Hook options:-
cache?
(ImageCacheOptions?): The cache options: -
enabled?
(boolean?): If the caching should be enabled -
maxAge?
(number?): The max age of the cache until the resources should be fetched again -
keyGenerator?
((url: string) => string): If the key of the cache shouldn't just be the src url.
-
-
isLoading
(boolean): Boolean to show if the image is loading -
image
(string): Either the url or the base64 data url of the image.
-
src
(string): The source of the image. -
alt
(string): The alt text of the image. -
height?
(number): The height of the image. Is required iffill
isfalse
. -
width?
(number): The width of the image. Is required iffill
isfalse
. -
fill?
(boolean): Whether the image should fill its container. Defaults tofalse
. -
loading?
('lazy' | 'eager'): The loading strategy of the image. Defaults tolazy
.
-
loader?
(ReactNode?): The loader to show while the image is loading. The custom node will be put into a container which has the exact width and height as the image will have. -
cache?
(ImageCacheOptions?): The cache options:-
enabled?
(boolean?): If the caching should be enabled -
maxAge?
(number?): The max age of the cache until the resources should be fetched again -
keyGenerator?
((url: string) => string): If the key of the cache shouldn't just be the src url.
-
The component can be used on Next.js and exposes the 'use client' directive as it uses useEffect, states and context.