React img 태그 fallback 이미지 설정 (+ 팁)

낙서·2022년 11월 20일
0

낙서

목록 보기
22/22
post-thumbnail

재사용하기 좋은 React 컴포넌트를 만드려 한다면, 발생할 수 있는 에러 케이스들을 최대한으로 커버할 수 있도록 견고하게 만들어야 한다.


// show alt text
<img src="wrong-src" alt="alternative text" />

img 태그의 src 값이 유효하지 않을 경우, alt attribute에 입력한 텍스트가 표시된다. 하지만 이는 화면이 깨진 느낌이고 스무스(Smooth)한 UX와 거리가 있다고 생각한다.


// set src to fallback image on error
<img src="wrong-src" onError={(event) => {
  event.currentTarget.src = defaultImageSrc;
}} />

img JSX의 에러 핸들러(onError)를 통해 src 값을 fallback 이미지 src로 변경해주면 alt 텍스트를 fallback 이미지로 대체 할 수 있다.


// works but wrong approach (+ does not work with typescript)
<img src="wrong-src" onError={(event) => {
  event.target.src = defaultImageSrc;
}} />

이렇게 event.target을 사용해서 src를 변경하면 안되고 event.currentTarget을 사용해야 한다. event.target은 에러 이벤트가 발생한 요소의 자녀 요소도 참조 할 수 있고 currentTarget은 에러가 발생한 img 요소만을 참조하기 때문에 차이가 있다.

만약 타입스크립트를 사용한다면 target 사용은 타입 에러를 발생시킨다. 이것이 잘 이해되지 않는다면 event.target과 event.currentTarget의 차이에 대해 알아보는 것이 도움이 될 수 있다.


// don't forget to add alt!
<img src="wrong-src" alt="alternative text" onError={(event) => {
  event.currentTarget.src = defaultImageSrc;
}} />

MDN에서 alt 프로퍼티 사용의 가장 큰 이유는 접근성 때문이라고 이야기한다. 스크린 리더기를 통해 소리만으로도 파악하기 쉽도록 텍스트 값을 설정하는 것이 좋다. 이미지로 fallback 처리를 하더라도 alt를 포함시켜주는 것이 최선이다.


// Wrapper component
<Image src="wrong-src" alt="alternative text" fallback={fallbackImage} />

Wrapper component 만들어 fallback을 살짝 더 깔끔하게 사용할 수도 있다.


// HTML img tag
<img src="wrong-src" alt="alternative" onerror="this.src='./default-img.png';" />

리액트가 아닌 HTML 태그에서는 onerror에서 this에 접근하여 src를 변경하는 방법이 있다.

profile
Deprecated

0개의 댓글