Перейти к содержимому

<svelte:boundary>

<svelte:boundary onerror={handler}>...</svelte:boundary>

Границы позволяют вам защититься от ошибок в части вашего приложения, которые могут привести к сбою всего приложения, и восстановиться после этих ошибок.

Если ошибка происходит во время рендеринга или обновления дочерних элементов <svelte:boundary>, или при выполнении любых функций $effect, содержащихся в них, содержимое будет удалено.

Ошибки, возникающие вне процесса рендеринга (например, в обработчиках событий или после setTimeout или асинхронной работы), не перехватываются границами ошибок.

Чтобы граница ошибок выполняла свою функцию, необходимо указать один или оба параметра: failed и onerror.

Если предоставлен фрагмент failed, он будет отрендерен с ошибкой, которая была выброшена, а также с функцией reset, которая воссоздаёт содержимое (демонстрация):

<svelte:boundary>
<FlakyComponent />
{#snippet failed(error, reset)}
<button onclick={reset}>упс! попробовать ещё раз</button>
{/snippet}
</svelte:boundary>

Если предоставлена функция onerror, она будет вызвана с теми же двумя аргументами: error и reset. Это полезно для отслеживания ошибок с помощью сервиса отчётов об ошибках…

<svelte:boundary onerror={(e) => report(e)}>
...
</svelte:boundary>

…или для использования error и reset за пределами самой границы:

<script>
let error = $state(null);
let reset = $state(() => {});
function onerror(e, r) {
error = e;
reset = r;
}
</script>
<svelte:boundary {onerror}>
<FlakyComponent />
</svelte:boundary>
{#if error}
<button onclick={() => {
error = null;
reset();
}}>
упс! попробовать ещё раз
</button>
{/if}

Если ошибка происходит внутри функции onerror (или если вы повторно выбрасываете ошибку), она будет обработана родительской границей, если таковая существует.