50.0.6 • Published 3 months ago

expo-cached-image v50.0.6

Weekly downloads
-
License
MIT
Repository
github
Last release
3 months ago

expo-cached-image

Super fast cached image component for react-native applications built with expo

Usage

Add to project

yarn add expo-cached-image

or

npx expo install expo-cached-image

CachedImage

import CachedImage from 'expo-cached-image'

Then it can be referenced in code like this:

<CachedImage
          source={{ 
            uri: `${item.getThumbUrl}`, // (required) -- URI of the image to be cached
            headers: `Authorization: Bearer ${token}`, // (optional)            
            expiresIn: 2_628_288, // 1 month in seconds (optional), if not set -- will never expire and will be managed by the OS
          }}
          cacheKey={`${item.id}-thumb`} // (required) -- key to store image locally
          placeholderContent={( // (optional) -- shows while the image is loading
            <ActivityIndicator // can be any react-native tag
              color={
                CONST.MAIN_COLOR
              }
              size="small"
              style={{
                flex: 1,
                justifyContent: "center",
              }}
            />
          )} 
          resizeMode="contain" // pass-through to <Image /> tag 
          style={              // pass-through to <Image /> tag 
            styles.photoContainer
          }
        />

<CachedImage/> internally uses the <Image/> component from 'react-native', so any properties that apply to the <Image/> can be passed into the <CachedImage/>.

cacheKey is the only property that's <CachedImage/> specific. The same cacheKey value should always be passed for the same source value. This is a little bit of an extra work from application development point of view, but this is how <CachedImage/> achieves it's performance. If not for cacheKey, the component would have to use some Crypto hash, which would add computational overhead. If you are rendering lots of images in a list on a screen -- this component will achieve the best performance.

CacheManager

import { CacheManager } from 'expo-cached-image'

If you have an image on local file system, which you want to add to cache, do this:

  photo.getImgUrl = await CacheManager.addToCache({
    file: `${CONST.PENDING_UPLOADS_FOLDER}${item}`,
    key: `${photo.id}`,
  })

To get local uri of the cached file by key:

  const uri = await CacheManager.getCachedUri({ key: `${item.id}` })

To pre-populate the cache ahead of time from remote URI:

// this is a convinience wrapper for https://docs.expo.dev/versions/latest/sdk/filesystem/#filesystemdownloadasyncuri-fileuri-options
  await CacheManager.downloadAsync({uri: `${item.url}`, key: `${item.id}`})

Sample projects

https://github.com/echowaves/WiSaw

https://www.wisaw.com/

50.0.6

3 months ago

49.0.2

5 months ago

49.0.1

5 months ago

48.1.0

11 months ago

48.0.0

1 year ago

47.1.6

1 year ago

47.1.5

1 year ago

47.1.4

1 year ago

47.1.3

1 year ago

47.1.2

1 year ago

47.1.1

1 year ago

47.0.0

1 year ago

47.1.0

1 year ago

46.0.1

2 years ago

45.1.1

2 years ago

45.1.0

2 years ago

45.0.0

2 years ago

46.0.0

2 years ago

44.2.1

2 years ago

44.1.2

2 years ago

44.1.1

2 years ago

44.1.4

2 years ago

44.1.3

2 years ago

44.1.6

2 years ago

44.1.5

2 years ago

44.1.7

2 years ago

44.1.0

2 years ago

44.0.0

2 years ago

43.0.1

3 years ago

43.0.0

3 years ago

2.0.1

3 years ago

2.0.0

3 years ago

1.1.1

3 years ago

1.1.0

3 years ago

1.1.2

3 years ago

1.0.11

3 years ago

1.0.10

3 years ago

1.0.9

3 years ago

1.0.8

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.2

3 years ago

1.0.1

3 years ago

1.0.3

3 years ago

1.0.0

3 years ago

0.1.1

3 years ago