react-native-yaimage v1.2.1
react-native-yaimage
Yet another Image component for React Native with images cached into file system.
Simple and flexible.
Installation
npm install react-native-yaimage --saveLink react-native-fetch-blob which is a dependency:
react-native link react-native-fetch-blob
Usage
Just replace
ImagewithYaImage, addrenderLoadingIndicatorprop to control the UI for feedback, e.g.```javascript import YaImage from 'react-native-yaimage'; <YaImage source={{ uri: 'https://facebook.github.io/react-native/img/react-native-congratulations.png' }} style={styles.image} renderLoadingIndicator={() => <Text>Loading...</Text>} /> ```Not using
Imagecomponent?imageComponentcomes to rescue, e.g. ResponsiveImage or PhotoView```javascript // ResponsiveImage <YaImage source={{ uri: 'https://facebook.github.io/react-native/img/react-native-congratulations.png' }} style={styles.image} initWidth="138" initHeight="138" renderLoadingIndicator={() => <Text>Loading...</Text>} imageComponent={ResponsiveImage} /> // PhotoView <YaImage source={{ uri: this.props.image }} minimumZoomScale={0.5} maximumZoomScale={3} androidScaleType="centerInside" onLoad={() => console.log('Image loaded!')} style={[{ width: this.props.width, height: this.props.height }, iosImageStyle]} onTap={Actions.pop} renderLoadingIndicator={() => <Text>Loading...</Text>} imageComponent={PhotoView} /> ```Cache operations
import imageCache from 'react-native-yaimage/cache'; imageCache.clear().then(() => console.log('cleared')); imageCache.size().then(v => console.log(`${v} bytes`));
Props
...Image.propTypes- Image PropsrenderLoadingIndicator- func What to show when loadingrenderLoadError- func What to show when load error, defaults torenderLoadingIndicatorimageComponent- func Which component class to use as the Image component, defaults toImagerenderLoadedImage- func What to show when loaded, arguments passed arepropsof this component instance,sourcewith the uri of the cached file; defaults to(props, source) => React.createElement(props.imageComponent, { ...props, source })fetchTimeout- number timeout for remote fetching, defaults to 30000(ms)cachePathPattern- string Where to store the loaded, a template interpolated with options{uri, MD5},uriis the remote URI, MD5 is the hash function; defaults to'${uri.hostname()}/${MD5(uri.toString())}${uri.suffix() ? ("." + uri.suffix()) : ""}', that means... e.g. https://facebook.github.io/react-native/img/react-native-congratulations.png will be cached atcacheRoot/facebook.github.io/06d46276f7fb741e7ebd0dfee4ca8d6a.png. You can customize it if you know what you are doing.
What if a remote uri without suffix?
Easy! I do my best to handle it for you.
But how? no magic but resort to Content-Type of the HTTP response, e.g. with the default cachePathPattern,
http://localhost:9000/ebooks/5805f2d9dc8877b70da04a2a/figures/10 will be cached at
cacheRoot/localhost/9375a0b9b094e04bcf0d9448f2400036.jpg if the Content-Type is image/jpeg.