avatar
morethan-log

img 태그 에러 대응하기 (이미지를 불러올 수 없을 때)

HTML
3 months ago
·
2 min read

언틸 서비스 초기에는 회원가입시 프로필 이미지를 oauth에서 제공하는 url을 그대로 저장해 사용했었다. (지금은 따로 s3에 저장하고 있습니다. 🥲)

때문에 해당 주소가 유효하지 않게 되면 아래와 같이 엑박이 발생했다.

until-1368

이런 문제를 해결하기 위해서는 img 태그의 onError를 적절히 사용해주면 된다.

상황에 따라 아예 display:none 을 걸어주거나, 대체 이미지를 보여줄 수도 있다. 언틸에서는 기본 아바타를 보여주는 방식으로 대응했다. 아래는 예시이다.

const Avatar = forwardRef<HTMLDivElement, Props>(
  (
    { type = 'user', size, src, loading = false, ...props },
    ref,
  ) => {
    const [isError, setIsError] = useState(false)

    if (loading)
      return (
        <Skeleton />
      )

    if (!src || isError) {
      return (
        <div
          ref={ref}
          css={[wrapperStyle, sizeStyle]}
          className={className}
          onClick={onClick}
          {...props}
        >
          <CgUserlane />
        </div>
      )
    }

    return (
      <div
        ref={ref}
        css={[wrapperStyle, sizeStyle]}
        {...props}
      >
        <Image src={src} fill alt="avatar" onError={() => setIsError(true)} />
      </div>
    )
  },
)

export default Avatar


- 컬렉션 아티클






몰댄민입니다