よっしー
こんにちは。よっしーです(^^)
今日は、SvelteKitでのShallow routingについて解説しています。
背景
SvelteKitでのShallow routingについて調査する機会がありましたので、その時の内容を備忘として記事に残しました。
API
pushState
の最初の引数は、現在のURLに対する相対URLです。現在のURLにとどまる場合は''
を使用します。
2番目の引数は新しいページの状態で、$page.state
としてページストアからアクセスできます。ページの状態を型安全にするには、App.PageState
インターフェース(通常はsrc/app.d.ts
に)を宣言します。
新しい履歴エントリを作成せずにページの状態を設定する場合は、pushState
の代わりにreplaceState
を使用します。
解説
このドキュメントは、SvelteKitの状態管理APIの詳細な使用方法を説明しています。主なポイントを解説します:
pushState
の引数:
- 第1引数:相対URL
- 空文字列
''
は現在のURLを維持 - 他のパスを指定すると、そのURLに対する状態となる
- 空文字列
- 第2引数:ページ状態
$page.state
でアクセス可能- 任意のJavaScriptオブジェクトが設定可能
- 型安全性の確保:
App.PageState
インターフェースを定義可能src/app.d.ts
に定義を配置- TypeScriptによる型チェックが有効
replaceState
の使用:
- 履歴エントリを追加せずに状態を更新
- 現在の履歴エントリを上書き
- ブラウザの戻る/進む操作に影響しない
使用例:
// src/app.d.ts
declare namespace App {
interface PageState {
showModal?: boolean;
selectedItem?: string;
// その他の状態定義
}
}
// コンポーネント内での使用
import { pushState, replaceState } from '$app/navigation';
// 新しい履歴エントリを作成
pushState('', { showModal: true });
// 現在の履歴エントリを更新
replaceState('', { showModal: false });
この機能は以下のような場合に特に有用です:
- モーダルダイアログの状態管理
- 複数ステップのフォーム
- アプリケーションの状態遷移
- ユーザーインタラクションの履歴管理
注意点:
- 状態は適切にシリアライズ可能である必要がある
- 大きすぎる状態オブジェクトは避ける
- 型定義を適切に行い、型安全性を確保する
おわりに
今日は、 SvelteKitでのShallow routingについて解説しました。
よっしー
何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
コメント