エラーによってアプリが壊れた状態になるのを防ぐために、<svelte:boundary> 要素を使用してエラー境界内にエラーを閉じ込めることができます。
この例では、<FlakyComponent> にバグが含まれています。ボタンをクリックすると mouse が null に設定されるため、テンプレート内の {mouse.x} および {mouse.y} 式がレンダリングに失敗します。
理想的な世界では、単にバグを修正します。ただし、それが常に選択肢とは限りません。コンポーネントが他のユーザーに属している場合もあれば、予期しない事態に備える必要がある場合もあります。まず、<FlakyComponent /> を <svelte:boundary> でラップします。
App
<svelte:boundary>
<FlakyComponent />
</svelte:boundary>今のところ、境界線はハンドラを指定していないため、何も変更されていません。エラーが発生したときに表示するUIを提供するために、failed スニペットを追加します。
App
<svelte:boundary>
<FlakyComponent />
{#snippet failed(error)}
<p>Oops! {error.message}</p>
{/snippet}
</svelte:boundary>これで、ボタンをクリックすると、境界線の内容がスニペットに置き換えられます。failed に渡される2番目の引数を利用して、リセットを試みることができます。
App
<svelte:boundary>
<FlakyComponent />
{#snippet failed(error, reset)}
<p>Oops! {error.message}</p>
<button onclick={reset}>Reset</button>
{/snippet}
</svelte:boundary>また、onerror ハンドラを指定することもできます。これは、failed スニペットに渡されるのと同じ引数で呼び出されます。
App
<svelte:boundary onerror={(e) => console.error(e)}>
<FlakyComponent />
{#snippet failed(error, reset)}
<p>Oops! {error.message}</p>
<button onclick={reset}>Reset</button>
{/snippet}
</svelte:boundary>これは、エラーに関する情報をレポートサービスに送信したり、エラー境界自体の外側にUIを追加したりするのに役立ちます。
前へ 次へ
1
2
3
4
5
6
<script>
import FlakyComponent from './FlakyComponent.svelte';
</script>
<FlakyComponent />