Skip to main content
Basic Svelte
Introduction
Reactivity
Props
Logic
Events
Bindings
Classes and styles
Actions
Transitions
Advanced Svelte
Advanced reactivity
Reusing content
Motion
Advanced bindings
Advanced transitions
Context API
Special elements
<script module>
Next steps
Basic SvelteKit
Introduction
Routing
Loading data
Headers and cookies
Shared modules
Forms
API routes
$app/state
Errors and redirects
Advanced SvelteKit
Hooks
Page options
Link options
Advanced routing
Advanced loading
Environment variables
Conclusion

エラーによってアプリが壊れた状態になるのを防ぐために、<svelte:boundary> 要素を使用して、エラーを エラー境界 内に封じ込めることができます。

この例では、<FlakyComponent> にバグが含まれています。ボタンをクリックすると、mousenull に設定され、テンプレート内の {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 を追加したりする場合に役立ちます。

Edit this page on GitHub

1
2
3
4
5
6
<script>
	import FlakyComponent from './FlakyComponent.svelte';
</script>
 
<FlakyComponent />