Revert "fix NativeImage state causing crashes in table"

This reverts commit 4008c8dfdf.
This commit is contained in:
jeffvli
2026-05-22 01:56:50 -07:00
parent 755f0aab9d
commit 2759cfee97
2 changed files with 15 additions and 60 deletions
+6 -13
View File
@@ -89,18 +89,11 @@ export function BaseImage({
const effectiveImageRequest = const effectiveImageRequest =
isInSessionCache || !enableDebounce ? rawImageRequest : debouncedImageRequest; isInSessionCache || !enableDebounce ? rawImageRequest : debouncedImageRequest;
const imageCacheKey = src ?? rawImageRequest?.cacheKey;
const trackLoadedInInstance = enableViewport;
const [hasLoadedInInstance, setHasLoadedInInstance] = useState(false); const [hasLoadedInInstance, setHasLoadedInInstance] = useState(false);
useEffect(() => { useEffect(() => {
if (!trackLoadedInInstance) { setHasLoadedInInstance(false);
return; }, [effectiveImageRequest?.cacheKey]);
}
setHasLoadedInInstance((current) => (current ? false : current));
}, [imageCacheKey, trackLoadedInInstance]);
const shouldLoadImage = Boolean( const shouldLoadImage = Boolean(
effectiveImageRequest && effectiveImageRequest &&
@@ -119,13 +112,13 @@ export function BaseImage({
}); });
useEffect(() => { useEffect(() => {
if (!trackLoadedInInstance || !nativeImage.isLoaded || !imageCacheKey) { if (!nativeImage.isLoaded || !effectiveImageRequest?.cacheKey) {
return; return;
} }
loadedImageCacheKeys.add(imageCacheKey); loadedImageCacheKeys.add(effectiveImageRequest.cacheKey);
setHasLoadedInInstance((current) => (current ? current : true)); setHasLoadedInInstance(true);
}, [imageCacheKey, nativeImage.isLoaded, trackLoadedInInstance]); }, [effectiveImageRequest?.cacheKey, nativeImage.isLoaded]);
return ( return (
<ImageContainer <ImageContainer
@@ -26,11 +26,8 @@ export function useNativeImage({
const loadedRequestSignatureRef = useRef<null | string>(null); const loadedRequestSignatureRef = useRef<null | string>(null);
const objectUrlRef = useRef<null | string>(null); const objectUrlRef = useRef<null | string>(null);
const onFetchErrorRef = useRef(onFetchError); const onFetchErrorRef = useRef(onFetchError);
const requestRef = useRef(request);
const [state, setState] = useState<NativeImageState>({ status: 'idle' }); const [state, setState] = useState<NativeImageState>({ status: 'idle' });
requestRef.current = request;
const requestSignature = useMemo(() => { const requestSignature = useMemo(() => {
if (!request) { if (!request) {
return null; return null;
@@ -47,8 +44,6 @@ export function useNativeImage({
onFetchErrorRef.current = onFetchError; onFetchErrorRef.current = onFetchError;
useEffect(() => { useEffect(() => {
const request = requestRef.current;
const abortCurrentRequest = () => { const abortCurrentRequest = () => {
abortControllerRef.current?.abort(); abortControllerRef.current?.abort();
abortControllerRef.current = null; abortControllerRef.current = null;
@@ -67,61 +62,28 @@ export function useNativeImage({
if (!request || !requestSignature) { if (!request || !requestSignature) {
abortCurrentRequest(); abortCurrentRequest();
revokeObjectUrl(); revokeObjectUrl();
setState((currentState) => { setState({ status: 'idle' });
if (currentState.status === 'idle' && !currentState.displaySrc) {
return currentState;
}
return { status: 'idle' };
});
return; return;
} }
if (!enabled) { if (!enabled) {
abortCurrentRequest(); abortCurrentRequest();
setState((currentState) => { setState((currentState) =>
if (currentState.displaySrc) { currentState.displaySrc
if (currentState.status === 'loaded') { ? { ...currentState, status: 'loaded' }
return currentState; : { status: 'idle' },
} );
return { ...currentState, status: 'loaded' };
}
if (currentState.status === 'idle' && !currentState.displaySrc) {
return currentState;
}
return { status: 'idle' };
});
return; return;
} }
if (loadedRequestSignatureRef.current === requestSignature && objectUrlRef.current) { if (loadedRequestSignatureRef.current === requestSignature && objectUrlRef.current) {
const cachedObjectUrl = objectUrlRef.current; setState({ displaySrc: objectUrlRef.current, status: 'loaded' });
setState((currentState) => {
if (
currentState.status === 'loaded' &&
currentState.displaySrc === cachedObjectUrl
) {
return currentState;
}
return { displaySrc: cachedObjectUrl, status: 'loaded' };
});
return; return;
} }
abortCurrentRequest(); abortCurrentRequest();
revokeObjectUrl(); revokeObjectUrl();
setState((currentState) => { setState({ status: 'loading' });
if (currentState.status === 'loading' && !currentState.displaySrc) {
return currentState;
}
return { status: 'loading' };
});
const abortController = new AbortController(); const abortController = new AbortController();
abortControllerRef.current = abortController; abortControllerRef.current = abortController;
@@ -176,7 +138,7 @@ export function useNativeImage({
abortControllerRef.current = null; abortControllerRef.current = null;
} }
}; };
}, [enabled, fetchPriority, requestSignature]); }, [enabled, fetchPriority, request, requestSignature]);
useEffect(() => { useEffect(() => {
return () => { return () => {