fix(fileloader): prevent infinite reload loop via untrack #243

Merged
marcel merged 1 commits from fix/file-loader-reactive-loop into main 2026-04-16 09:09:41 +02:00

View File

@@ -1,3 +1,5 @@
import { untrack } from 'svelte';
export function createFileLoader() {
let fileUrl = $state('');
let isLoading = $state(false);
@@ -6,7 +8,11 @@ export function createFileLoader() {
async function loadFile(url: string): Promise<void> {
isLoading = true;
fileError = '';
if (fileUrl) URL.revokeObjectURL(fileUrl);
// untrack prevents callers ($effect) from accidentally subscribing to fileUrl.
// Without it, the calling effect would re-run every time fileUrl changes (i.e.
// on every successful load), creating an infinite load loop.
const prev = untrack(() => fileUrl);
if (prev) URL.revokeObjectURL(prev);
fileUrl = '';
try {