1.3.0 • Published 3 years ago

react-weather-illustrations v1.3.0

Weekly downloads
-
License
MIT
Repository
-
Last release
3 years ago

react-weather-illustrations

Demo app Bundle size Support semantic-release Conventional Commits

This is a react wrapper for the awesome weather icon library produced by Bas Milius. This library is rather large (2mb) so my wrapper uses dynamic imports to request the icon when you need it instead of adding the entire icon library to your initial bundle.

Usage

Currently this can be used with suspense, dynamic loading libraries such as react loadable or with a basic hook.

Promise

This is the basic loader for use with everything except React suspense. Currently there are two.

String Loader

import React, { useState, useEffect } from 'react';
import { loadSvgStringAsync } from 'react-weather-illustrations';

const Demo: React.FC = () => {
    const [icon, setIcon] = useState<string | undefined>();

    useEffect(() => {
        const getIcon = async () => {
            const data = await loadSvgStringAsync('darksky', 'fill', 'clear-day');
            setIcon(data);
        }

        getIcon();
    }, []);

    return icon 
        ? <img src={icon} alt="weather icon" /> 
        : <div>Loading...</div>;
}

JSX Loader

import React, { useState, useEffect } from 'react';
import { loadAsync } from 'react-weather-illustrations';

const Temperature: React.FC = () => {
    const [Icon, setIcon] = useState<JSX.Element | undefined>();

    useEffect(() => {
        const getIcon = async () => {
            const icon = await loadAsync('darksky', 'fill', 'clear-day');
            setIcon(icon);
        }

        getIcon();
    }, []);

    return Icon ? <Icon /> : <div>Loading...</div>;
}

Suspense

Because suspense is reliant on a different flow this library exports repositories which are essentially just fetchers that cache and throw the result.

import React, { Suspense } from 'react';
import { repositories } from 'react-weather-illustrations';

const Icon: React.FC = () => {
    const svg = repositories.fill.darksky.read('clear-night');
    return <img src={svg} alt="weather icon" />;
}

export const Temperature: React.FC = () => (
    <Suspense fallback={<div>Loading</div>}>
        <Icon />
    </Suspense>
)

Loadable

This is an example of how this library can be used with one of many third party loading tools.

import React from 'react';
import loadable from '@loadable/component';
import { loadSvgStringAsync } from 'react-weather-illustrations';

const loader = async () => {
  const icon = await loadSvgStringAsync('darksky', 'fill', 'clear-night');
  return {
    default: () => <img src={icon} alt="" />
  }
};

export const Temperature = loadable(loader, {
  fallback: <div>Loading...</div>,
})
1.3.0

3 years ago

1.2.0

3 years ago

1.1.1

3 years ago

1.1.0

3 years ago

1.0.7

3 years ago

1.0.6

3 years ago

1.0.5

3 years ago

1.0.4

3 years ago

1.0.3

3 years ago

1.0.2

3 years ago

1.0.1

3 years ago