1.1.5 • Published 3 years ago

react-use-images v1.1.5

Weekly downloads
1
License
MIT
Repository
github
Last release
3 years ago

react-use-images custom hook

React hook to preload multiple images.

Install

npm install react-use-images

Usage

There are 3 use cases for react-use-images: 1. Utilise useImages hook to preload images during the render step 2. Utilise context component to make preloaded images available to child components 3. Utilise loadImages() callback function to load images as a side effect

useImages

import React from 'react';
import { useImages, PreloadedImage, PreloadedState } from "react-use-images";

export const Component: FunctionComponent = () => {

    const urls = ["https://somewebsite/image.png", "https://anotherwebsite/anotherimage.jpg"]
    const crossorigin = null;

    const imageStates: Map<string, PreloadedImage> = useImages(urls, crossorigin);

    if (Array.from(imageStates.values()).some(image => image.state === PreloadedState.LOADING)) return null;

    return (
        <div>
            {
                Array.from(imageStates.values()).map(image => image.image)
            }
        </div>
    )


}

PreloadImages

ParentComponent

import React from 'react';
import { PreloadImages, PreloadedImage, PreloadedState } from "react-use-images";

export const ParentComponent: FunctionComponent = () => {

    const urls = ["https://somewebsite/image.png", "https://anotherwebsite/anotherimage.jpg"]

    const ComponentToDisplayWhileWaiting = (<div>loading...</div>);
    const ComponentToDisplayOnError = (<div>error</div>);

    return (
        <PreloadImages 
            urls={urls}
            Waiting={ComponentToDisplayWhileWaiting}
            Error={ComponentToDisplayOnError}

        >
            <ChildComponent>
        </PreloadImages>
    )


}

ChildComponent

import React from 'react';
import { PreloadedImage, ImageContext } from "react-use-images";

export const ChildComponent: FunctionComponent = () => {

    const images = useContext(ImageContext) as Map<string, PreloadedImage>;

    return (
        Array.from(images.values()).map(image => image.image)
    )


}

loadImages

import React, {useState} from 'react';
import { loadImages } from "react-use-images";

export const Component: FunctionComponent = () => {

    const [images, setImages] = useState(null);

    useEffect(() => {
        const urls = ["https://somewebsite/image.png", "https://anotherwebsite/anotherimage.jpg"]

        loadImages(urls, loadedImages => {
            setImages(loadedImages);
        });

    },[]);

    if (!images) return null;

    return (
        <div>
            {
                Array.from(images.values()).map(image => image.image)
            }
        </div>
    )


}

License

MIT

1.1.1

3 years ago

1.1.5

3 years ago

1.1.4

3 years ago

1.1.3

3 years ago

1.1.2

3 years ago

1.1.0

3 years ago

1.0.1

4 years ago

1.0.0

4 years ago