import React from 'react'; import PropTypes from 'prop-types'; class ImageLoader extends React.PureComponent { static propTypes = { src: PropTypes.string.isRequired, } state = { loading: true, error: false, } componentWillMount() { this.loadImage(this.props.src); } componentWillReceiveProps(props) { this.loadImage(props.src); } loadImage(src) { const image = new Image(); image.onerror = () => this.setState({loading: false, error: true}); image.onload = () => this.setState({loading: false, error: false}); image.src = src; this.lastSrc = src; this.setState({loading: true}); } render() { const { src } = this.props; const { loading, error } = this.state; // TODO: handle image error state const imageClass = `image-loader__img ${loading ? 'image-loader__img-loading' : ''}`; return ; // eslint-disable-line jsx-a11y/img-has-alt } } export default ImageLoader;