·

React 实现异常图片占位,优化用户体验,可以看看这个,类似的问题,react 下的实现:

// Note: 此组件避免在服务端渲染应用中使用,可能会有错误
import React, { FC, useCallback, useEffect, useState } from 'react';

interface Props extends React.DetailedHTMLProps<React.ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement> {
  fallbackSrc?: string;   // 加载图片异常时的替代图片
}

const Index: FC<Props> = ({ src, fallbackSrc, ...props}) => {
  const [originalSrc, setOriginalSrc] = useState(src);

  // 错误标志,确保 onError 只执行一次,避免死循环
  const [errored, setErrored] = useState(false);

  // 图片改变时重置数据
  useEffect(() => {
    setOriginalSrc(src);
    setErrored(false);
  }, [src]);

  const onError = useCallback(() => {
    if (!errored) {
      setOriginalSrc(fallbackSrc);
      setErrored(true);
    }
  }, [errored, fallbackSrc]);

  // eslint-disable-next-line jsx-a11y/alt-text
  return <img src={originalSrc} onError={onError}{...props}/>;
};

export default Index;
Replies
1

好的