IKHSAN
ENID Baca dalam Bahasa Indonesia

snapme

Public
Branch
master
Latest commit
130fdb828 October 2026

useHtmlImage.ts

Open raw
import { useEffect, useState } from "react"

/* Pengganti paket `use-image` (DECISIONS M4): satu berkas, tanpa dependensi.
   Hasil hanya dikembalikan saat `src`-nya masih cocok, supaya foto yang diulang
   tidak menampilkan gambar lama selama dataURL baru dimuat. */

interface LoadedImage {
  src: string
  image: HTMLImageElement
}

export function useHtmlImage(
  src: string | undefined
): HTMLImageElement | undefined {
  const [loaded, setLoaded] = useState<LoadedImage | null>(null)

  useEffect(() => {
    if (src === undefined) {
      return
    }

    let active = true
    const image = new window.Image()
    image.onload = () => {
      if (active) {
        setLoaded({ src, image })
      }
    }
    image.src = src

    return () => {
      active = false
      image.onload = null
    }
  }, [src])

  return loaded !== null && loaded.src === src ? loaded.image : undefined
}
bytes
897
lines
39
Type
ts
Latest commit
28 October 2026