<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
Заголовок раздела «onerror»Если предоставлена функция 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
(или если вы повторно выбрасываете ошибку), она будет обработана родительской границей, если таковая существует.