Skip to content

Commit 34f5b73

Browse files
committed
fix: image src
Signed-off-by: Innei <[email protected]>
1 parent c00b0df commit 34f5b73

File tree

1 file changed

+33
-4
lines changed

1 file changed

+33
-4
lines changed

src/components/ui/image/ZoomedImage.tsx

+33-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
11
'use client'
22

3-
import { forwardRef, memo, useCallback, useMemo, useRef, useState } from 'react'
3+
import {
4+
cloneElement,
5+
forwardRef,
6+
memo,
7+
useCallback,
8+
useImperativeHandle,
9+
useMemo,
10+
useRef,
11+
useState,
12+
} from 'react'
413
import clsx from 'clsx'
514
import { useIsomorphicLayoutEffect } from 'foxact/use-isomorphic-layout-effect'
615
import mediumZoom from 'medium-zoom'
@@ -296,14 +305,31 @@ const OptimizedImage = memo(
296305
const { height, width } = useMarkdownImageRecord(src!) || rest
297306
const hasDim = !!(height && width)
298307

308+
const placeholderImageRef = useRef<HTMLImageElement>(null)
299309
const ImageEl = (
300-
<img data-zoom-src={src} alt={alt} src={src} ref={ref} {...rest} />
310+
<img
311+
data-zoom-src={src}
312+
alt={alt}
313+
src={src}
314+
ref={placeholderImageRef}
315+
{...rest}
316+
/>
301317
)
318+
319+
useImperativeHandle(ref, () => placeholderImageRef.current!)
320+
321+
const optimizedImageRef = useRef<HTMLImageElement>(null)
322+
323+
useIsomorphicLayoutEffect(() => {
324+
const $renderImage = optimizedImageRef.current
325+
if (!$renderImage) return
326+
if (!placeholderImageRef.current) return
327+
placeholderImageRef.current.src = $renderImage.src
328+
}, [src])
302329
return (
303330
<>
304331
{hasDim ? (
305332
<>
306-
{/* @ts-expect-error */}
307333
<Image
308334
alt={alt || ''}
309335
fetchPriority="high"
@@ -312,9 +338,12 @@ const OptimizedImage = memo(
312338
{...rest}
313339
height={+height}
314340
width={+width}
341+
ref={optimizedImageRef}
315342
/>
316343
<div className="absolute inset-0 flex justify-center opacity-0">
317-
{ImageEl}
344+
{cloneElement(ImageEl, {
345+
src: 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7', // blank src
346+
})}
318347
</div>
319348
</>
320349
) : (

0 commit comments

Comments
 (0)