<svelte:boundary>
<svelte:boundary onerror={handler}>...</svelte:boundary>この機能は 5.3.0 で追加されました
境界を使用すると、アプリの一部で発生したエラーがアプリ全体を壊すのを防ぎ、それらのエラーから回復することができます。
<svelte:boundary> の子要素のレンダリングまたは更新中、あるいはそこに含まれる $effect 関数の実行中にエラーが発生した場合、コンテンツは削除されます。
レンダリングプロセス外で発生するエラー(たとえば、イベントハンドラー内)は、エラー境界によってキャッチされません。
プロパティ
境界が機能するためには、failed と onerror のいずれか一方または両方を指定する必要があります。
failed
failed スニペットが指定された場合、スローされたエラーと、コンテンツを再作成する reset 関数を使用してレンダリングされます(デモ)
<svelte:boundary>
<FlakyComponent />
{#snippet failed(error, reset)}
<button onclick={reset}>oops! try again</button>
{/snippet}
</svelte:boundary>コンポーネントに渡されるスニペットと同様に、
failedスニペットはプロパティとして明示的に渡すことができます...<svelte:boundary {failed}>...</svelte:boundary>...または、上記の例のように、境界の内側で直接宣言することで暗黙的に渡すこともできます。
onerror
onerror 関数が指定されている場合、同じ 2 つの 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();
}}>
oops! try again
</button>
{/if}onerror 関数内でエラーが発生した場合(またはエラーを再スローした場合)、そのエラーは、存在する場合は親の境界によって処理されます。