Basic Svelte
Bindings
Classes and styles
Advanced Svelte
Advanced reactivity
Motion
Advanced bindings
Advanced transitions
Context API
Special elements
<script module>
Next steps
Basic SvelteKit
Introduction
Routing
Loading data
Headers and cookies
Shared modules
API routes
$app/state
Errors and redirects
Advanced SvelteKit
Page options
Link options
Advanced routing
Advanced loading
Environment variables
Conclusion
エラーによってアプリが壊れた状態になるのを防ぐために、<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>
また、failed
スニペットに渡されるのと同じ引数で呼び出される onerror
ハンドラを指定することもできます。
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 を追加したりする場合に役立ちます。
previous next
1
2
3
4
5
6
<script>
import FlakyComponent from './FlakyComponent.svelte';
</script>
<FlakyComponent />