Bilder rendern – der bessere Weg

Dec 10 2022
Was ich früher gemacht habe Rendere ein Bild mit dem img-Element und wenn src null oder undefiniert ist, rendere ein Fallback-Bild. Was passiert, wenn ein Bild fehlschlägt Immer wenn ein Bild nicht geladen werden kann, wird ein onError-Ereignis ausgelöst, wir können dieses Ereignis verwenden, um src auf ein Fallback-Bild zu aktualisieren.
Bild von Alexandra_Koch von Pixabay

Was ich früher gemacht habe

Rendern Sie ein Bild mit dem img-Element, und wenn src null oder undefiniert ist, rendern Sie ein Fallback-Bild.

import { FC } from "react";

type ImageProps = {
  src: string;
  alt: string;
};

const Image: FC<ImageProps> = ({src, alt}) => {
  return <img alt={alt} src={src || "fallback.jpg"}/>; 
}

Beispiel für ein leeres Bild, wenn src ungültig ist

Was passiert, wenn ein Bild fehlschlägt

Immer wenn ein Bild nicht geladen werden kann, wird ein onError-Ereignis ausgelöst, wir können dieses Ereignis verwenden, um src auf ein Fallback-Bild zu aktualisieren.

Updates für die Fehlerbehebung

Anstatt direkt eine optionale Bedingung des Fallback-Bildes hinzuzufügen, können wir einen onError-Ereignishandler hinzufügen, um dasselbe zu tun.

useImage-Hook

import { SyntheticEvent, useEffect, useState } from "react";
import { ImageProps } from "./Image";

type ImagePropsGetter = () => ImageProps & {
  onError: (e: SyntheticEvent<HTMLImageElement>) => void;
};

const useImage = ({
  src: srcFromProps,
  alt
}: ImageProps): { getImageProps: ImagePropsGetter } => {
  const [src, setSrc] = useState(srcFromProps);

  const onError = () => {
    setSrc("fallback.jpg");
  };

  useEffect(() => {
    setSrc(srcFromProps);
  }, [srcFromProps]);

  const getImageProps: ImagePropsGetter = () => {
    return { src, alt, onError };
  };

  return { getImageProps };
};

export default useImage;

import { FC } from "react";
import useImage from "./useImage";

export type ImageProps = {
  src: string;
  alt: string;
};

const Image: FC<ImageProps> = (props) => {
  const { getImageProps } = useImage(props);

  return <img {...getImageProps()} />;
};

export default Image;

Bild von Alexandra_Koch von Pixabay

Externe Links