🤘 A super duper hero unit react-native component with support for dynamic image, dynamic sizing, color overlays, and more.
Why not just nest it under <Image>? Well react-native-hero is a flexible abstraction on top of <Image>Text</Image>, however it includes a couple of useful things out of the box.
- Dynamic sizing of the background image based on the content, no need to worry about text overflows
 - Full width sizing by device width, while supporting device rotation
 - Support for remote images or local image
 - Statically defined height of the hero
 - Support for color overlay with opacity selection
 - Support to use any custom third-party image component
 
- Install the repository
$ npm install --save react-native-hero
 - Add an import to the top of your file
import Hero from 'react-native-hero';
 - Declare the component in the render method of your component
render() { return ( <Hero source={{uri: 'http://helloworld.com/1.jpeg'}} renderOverlay={() => ( <View> <Text>React Native Hero!</Text> <Text>Is super duper, cool!</Text> </View> )} /> ) }
 - Want more examples or a better demo? Take a look at the example app.
 
Import react-native-blur and add it to your overlay.
// Assuming props.renderOverlay renders with overlay()
 <Hero
    source={{uri: 'http://helloworld.com/1.jpeg'}}
    renderOverlay={() => (
       <BlurView blurType="dark" blurAmount={10}>
           <Text style={style.type.h1}>La Catalana<Text>
           <Text style={style.type.h2}>tapas, spanish, wine_bars</Text>
           <Text style={style.loc}>0.74 Miles</Text>
           <Text style={style.address}>San Jose, CA</Text>
       </BlurView> )} 
  />
}Set Hero.props.colorOverlay to a react-native color format, and set a desired opacity with Hero.props.colorOpacity.
render() {
    return (
        <Hero
          source={{uri: 'http://helloworld.com/1.jpeg'}}
          renderOverlay={() => (
            <Text style={style.type.h1}>Parcel 104<Text>
            <Text style={style.type.h2}>newamerican, wine_bars</Text>
            <Text style={style.loc}>1.72 Miles</Text>
            <Text style={style.address}>Santa Clara, CA</Text> )}
          colorOverlay="#1bb4d8"
          colorOpacity={0.5}/>
    )
}There may be times when you want to utilize a third-party image component such as fast-image. react-native-hero allows a custom component to be used in place of the default <Image>, the only requirement is a custom component following the standard <Image> interface. In addition, you can also pass along custom properties to the component through the customImageProps attribute.
Example: Using react-native-fast-image
import FastImage from 'react-native-fast-image';
const fastProps = {
    resizeMode: FastImage.resizeMode.contain
};
render() {
    return (
        <Hero
           source={{uri: 'http://helloworld.com/1.jpeg'}}
           renderOverlay{() => (
             <Text style={style.type.h1}>Parcel 104<Text>
             <Text style={style.type.h2}>newamerican, wine_bars</Text>
             <Text style={style.loc}>1.72 Miles</Text>
             <Text style={style.address}>Santa Clara, CA</Text> )}
           colorOverlay="#1bb4d8"
           colorOpacity={0.5}
           customImageComponent={FastImage}
           customImageProps={fastProps}
         />
    )
}| Props | Type | Description | 
|---|---|---|
| source | object or module | A local or remote image, with support for images bundled with require. EX: source={{ uri: 'http://logo.jpg' }} or source=require('images/logo.jpg') | 
| renderOverlay | func | A function that renders the content to be placed on top of the hero unit, and colored overlay (if applicable). | 
| colorOverlay | color | A colored overlay sitting below the rendered content overlay. Set the colorOverlay to a color to activate it. | 
| colorOpacity | num | If colorOverlay is set, this sets the level of opacity. Default: .30 | 
| fullWidth | bool | A boolean indicating if the hero unit should be sized the full width of the device. Setting to false will size it according to the contents size.Default: true | 
| minHeight | num | A statically defined height for the hero unit, overrides dynamic sizing based on content. | 
| customImageComponent | React.Component | 
Use a custom component to be rendered for the Image. This will work properly, as long as the component follows the standard interface of the react-native image component. | 
| customImageProps | object | Pass along additional properties to a props.customImageComponent. | 
👷🏽👷🏻♀️🐕
PR's are welcomed and desired, just abide by rules listed within contributing.json.
Not sure where to start, or a beginner? No problemo! Take a look at the issues page for low-hanging or beginner-friendly labels as an easy ways to start contributing.
MIT © Brandon Him


