Files
react-native-web/docs/components/Image.md
Nicolas Gallagher 565ec2fee8 Docs: minor update
2015-09-20 15:50:22 -07:00

2.7 KiB

Image

An accessibile image component with support for image resizing, default image, and child content.

Unsupported React Native props: capInsets (ios), onProgress (ios)

Props

accessibilityLabel: string

The text that's read by a screenreader when someone interacts with the image.

accessible: bool

When false, the view is hidden from screenreaders. Default: true.

children: any

Content to display over the image.

defaultSource: { uri: string }

An image to display as a placeholder while downloading the final image off the network.

onError: function

Invoked on load error with {nativeEvent: {error}}.

onLayout: function

TODO

onLoad: function

Invoked when load completes successfully.

onLoadEnd: function

Invoked when load either succeeds or fails,

onLoadStart: function

Invoked on load start.

resizeMode: oneOf('contain', 'cover', 'none', 'stretch') = 'stretch'

Determines how to resize the image when the frame doesn't match the raw image dimensions.

source: { uri: string }

uri is a string representing the resource identifier for the image, which could be an http address or a base64 encoded image.

style: style

View style

Defaults:

{
  alignSelf: 'flex-start',
  backgroundColor: 'lightGray'
}

testID: string

Used to locate a view in end-to-end tests.

Examples

import placeholderAvatar from './placeholderAvatar.png'
import React, { Image } from 'react-native-web'

const { Component, PropTypes } = React;

class Avatar extends Component {
  constructor(props, context) {
    super(props, context)
    this.state = { loading: true }
  }

  static propTypes = {
    size: PropTypes.oneOf(['small', 'normal', 'large']),
    testID: Image.propTypes.testID,
    user: PropTypes.object
  }

  static defaultProps = {
    size: 'normal'
  }

  _onLoad(e) {
    console.log('Avatar.onLoad', e)
    this.setState({ loading: false })
  }

  render() {
    const { size, testID, user } = this.props
    const loadingStyle = this.state.loading ? { styles.loading } : { }

    return (
      <Image
        accessibilityLabel={`${user.name}'s profile picture`}
        defaultSource={{ uri: placeholderAvatar }}
        onLoad={this._onLoad.bind(this)}
        resizeMode='cover'
        source={{ uri: user.avatarUrl }}
        style={{ ...styles.base, ...styles[size], ...loadingStyle }}
      />
    )
  }
}

const styles = {
  base: {
    borderColor: 'white',
    borderRadius: '5px',
    borderWidth: '5px'
  },
  loading: {
    opacity: 0.5
  },
  small: {
    height: '32px',
    width: '32px'
  },
  normal: {
    height: '48px',
    width: '48px'
  },
  large: {
    height: '64px',
    width: '64px'
  }
}