1. import React, { useState } from 'react';
    2. import PropTypes from 'prop-types';
    3. const Img = (props) => {
    4. const { defaultImg, alt, src, className } = props;
    5. const [currentSrc, setCurrentSrc] = useState(defaultImg);
    6. /**
    7. * 图片加载完成
    8. */
    9. const handleOnLoad = () => {
    10. // 创建一个img标签
    11. const imgDom = new Image();
    12. imgDom.src = props.src;
    13. // 图片加载使用正常的图片
    14. imgDom.onload = () => {
    15. setCurrentSrc(src);
    16. }
    17. // 图片加载失败使用图片占位符
    18. imgDom.onerror = () => {
    19. setCurrentSrc(defaultImg);
    20. };
    21. };
    22. return (
    23. <img
    24. className={className}
    25. alt={alt}
    26. src={currentSrc}
    27. onLoad={handleOnLoad()}
    28. />
    29. );
    30. };
    31. Img.propTypes = {
    32. defaultImg: PropTypes.string,
    33. className: PropTypes.string,
    34. alt: PropTypes.string,
    35. src: PropTypes.string,
    36. };
    37. Img.defaultProps = {
    38. alt: '图片',
    39. className: '',
    40. alt: '',
    41. src: '',
    42. };