@@ -60,8 +60,8 @@ export default function RetryableImage(props: RetryableImageProps) {
6060 const [ attempt , setAttempt ] = useState < number > ( 0 )
6161 const [ displayedSrc , setDisplayedSrc ] = useState < string | undefined > (
6262 undefined ,
63- ) // last good
64- const [ pendingSrc , setPendingSrc ] = useState < string | undefined > ( undefined ) // hidden probe via <img>
63+ )
64+ const [ probing , setProbing ] = useState < boolean > ( false )
6565
6666 const currentSrcBase = useMemo (
6767 ( ) => baseUrl ( typeof src === "string" ? src : undefined ) ,
@@ -101,7 +101,7 @@ export default function RetryableImage(props: RetryableImageProps) {
101101 setError ( null )
102102 }
103103
104- setPendingSrc ( String ( src ) )
104+ setProbing ( true )
105105 } , [ currentSrcBase , src ] )
106106
107107 useEffect ( ( ) => {
@@ -116,27 +116,29 @@ export default function RetryableImage(props: RetryableImageProps) {
116116 setLoading ( false )
117117 setError ( { message : "Image failed to load after retries." } )
118118 onRetryExhausted ?.( )
119+ setProbing ( false )
119120 return
120121 }
121122 const next = attempt + 1
122123 setAttempt ( next )
123124 onRetry ?.( next )
124125 retryTimeoutRef . current = window . setTimeout ( ( ) => {
125126 if ( ! mountedRef . current ) return
126- beginLoad ( next )
127+ beginLoad ( )
127128 } , retryDelay )
128129 } , [ attempt , maxRetries , onRetry , onRetryExhausted , retryDelay , beginLoad ] )
129130
130131 const handleProbeLoad = ( ) => {
131- if ( ! pendingSrc ) return
132- setDisplayedSrc ( pendingSrc )
133- setPendingSrc ( undefined )
132+ if ( ! src ) return
133+ setDisplayedSrc ( String ( src ) )
134134 setLoading ( false )
135135 setError ( null )
136+ setProbing ( false )
136137 lastSuccessBaseRef . current = currentSrcBase
137138 }
138139
139140 const handleProbeError = ( ) => {
141+ setProbing ( false )
140142 scheduleRetry ( )
141143 }
142144
@@ -231,10 +233,9 @@ export default function RetryableImage(props: RetryableImageProps) {
231233 </ Center >
232234 ) }
233235
234- { /* Hidden pending image that actually drives the new request */ }
235- { pendingSrc && (
236+ { probing && src && (
236237 < img
237- src = { pendingSrc }
238+ src = { src }
238239 alt = ""
239240 onLoad = { handleProbeLoad }
240241 onError = { handleProbeError }
0 commit comments