UNPKG

react-use-optimized-image

Version:

A React hook for image optimization (format detection, lazy loading, caching, CDN support)

150 lines (108 loc) • 3.68 kB
# šŸš€ React Use Optimized Image A smart **image optimization hook** for React that improves performance by **auto-detecting formats, lazy loading, caching, and optimizing based on network speed**. šŸŽÆ ![npm](https://img.shields.io/npm/v/react-use-optimized-image?color=blue&style=flat-square) ![npm downloads](https://img.shields.io/npm/dt/react-use-optimized-image?color=green&style=flat-square) ![MIT License](https://img.shields.io/npm/l/react-use-optimized-image?color=orange&style=flat-square) --- ## šŸ“¦ **Installation** ```sh npm install react-use-optimized-image # or yarn add react-use-optimized-image ``` ## 🌟 **Features & Benefits** ### āœ… **Automatic Format Detection** - Uses **WebP / AVIF** for supported browsers for better compression. - Falls back to **JPEG / PNG** for older browsers. - Saves bandwidth & improves **Core Web Vitals (LCP, FCP).** ### šŸš€ **Lazy Loading for Faster Performance** - Uses **`IntersectionObserver`** to load images only when visible. - Reduces **initial page load time** and improves SEO. ### šŸ’¾ **Smart Caching with Local Storage** - Stores **optimized image URLs** in `localStorage` for **instant reloads**. - Reduces **redundant requests**, making browsing faster. ### ⚔ **Network Speed Adaptation** - Uses **`navigator.connection.effectiveType`** to adjust image quality: - **Fast network** → Loads high-resolution images. - **Slow network (2G/3G)** → Loads compressed images to improve speed. ### šŸŒ **CDN Support for Global Access** - Supports **Cloudinary, Imgix, and other CDNs**. - Ensures **faster load times** for users worldwide. ### šŸ”§ **Developer-Friendly API** - Simple **React hook-based API** with **TypeScript support**. - Fully customizable with **format, quality, and lazy load options**. --- # šŸ›  Usage Examples (JSX) ## šŸ“Œ Basic JSX Example ```jsx import React from "react"; import { useOptimizedImage } from "react-use-optimized-image"; const ImageComponent = () => { const { optimizedSrc, isLoading, imgRef } = useOptimizedImage({ src: "https://example.com/image.jpg", lazy: true, }); return ( <div> {isLoading ? ( <p>Loading...</p> ) : ( <img ref={imgRef} src={optimizedSrc} alt="Optimized" /> )} </div> ); }; export default ImageComponent; ``` ## šŸ“Œ TypeScript Example with Custom Props ```tsx import React from "react"; import { useOptimizedImage } from "react-use-optimized-image"; interface ImageProps { src: string; alt: string; quality?: number; } const OptimizedImage: React.FC<ImageProps> = ({ src, alt, quality = 80 }) => { const { optimizedSrc, isLoading, imgRef } = useOptimizedImage({ src, quality, }); return ( <div> {isLoading ? ( <p>Loading...</p> ) : ( <img ref={imgRef} src={optimizedSrc!} alt={alt} /> )} </div> ); }; export default OptimizedImage; ``` # šŸ”„ Advanced Use Cases ## 1ļøāƒ£ Optimizing Images with CDN ```jsx const { optimizedSrc } = useOptimizedImage({ src: "https://res.cloudinary.com/demo/image/upload/sample.jpg", quality: 80, cdn: "cloudinary", }); ``` āœ… Automatically formats URL for better compression & performance. ## 2ļøāƒ£ Caching for Faster Reloads ```jsx const { optimizedSrc } = useOptimizedImage({ src: "https://example.com/image.jpg", cache: true, }); ``` āœ… Minimizes redundant API calls, reducing server load. ## 3ļøāƒ£ Adaptive Quality Based on Network Speed ```jsx const { optimizedSrc } = useOptimizedImage({ src: "https://example.com/image.jpg", adjustForNetwork: true, }); ``` āœ… Ensures fast loading for all users, even on mobile networks.