|
|
@@ -1,37 +0,0 @@
|
|
|
-# ブラウザバックナビゲーションバグ修正
|
|
|
-
|
|
|
-## 問題の概要
|
|
|
-ページA → ページB → ページC → ページD と遷移してブラウザバックすると、ページBやページCの内容がレンダリングされないことがある。URLバーは更新されているが、ページコンテンツが表示されない現象。
|
|
|
-
|
|
|
-## 根本原因
|
|
|
-1. **競合状態(Race Condition)**: 高速なブラウザバック時に `fetchCurrentPage` が複数回並行実行され、古いリクエストが新しいリクエストの結果を上書き
|
|
|
-2. **状態更新の不整合**: pageIdとpageDataの更新タイミングのズレ
|
|
|
-3. **navigationState.shouldFetchの判定ミス**: 複雑な条件分岐で期待される場面でfetchがスキップ
|
|
|
-
|
|
|
-## 実装した修正
|
|
|
-
|
|
|
-### 1. useSameRouteNavigation.ts の改善
|
|
|
-- **競合防止**: `currentFetchRef` を使用して現在のfetch操作を追跡
|
|
|
-- **重複実行防止**: `lastPathnameRef` で前回のpathnameと比較
|
|
|
-- **fetch結果の検証**: 完了したfetch操作が最新のものかチェック
|
|
|
-- **エラーハンドリング**: 古いfetch操作のエラーは無視
|
|
|
-
|
|
|
-### 2. navigation-utils.ts の改善
|
|
|
-- **`createNavigationState`関数の強化**: `hasNoCurrentData` チェックを追加
|
|
|
-- **より確実な判定ロジック**: ブラウザバック時のエッジケースに対応
|
|
|
-
|
|
|
-## テスト方法
|
|
|
-1. ページA → ページB → ページC → ページD と順番に遷移
|
|
|
-2. 高速にブラウザバックを実行(連続クリック)
|
|
|
-3. 各ページで正しいコンテンツが表示されることを確認
|
|
|
-4. 開発者ツールのConsoleでdebugging logを確認
|
|
|
-
|
|
|
-## 期待される結果
|
|
|
-- ブラウザバック時に常に正しいページコンテンツが表示される
|
|
|
-- URLバーとページ内容が一致する
|
|
|
-- 競合状態によるデータの不整合が解消される
|
|
|
-
|
|
|
-## 注意点
|
|
|
-- `fetchCurrentPage`の重複実行は防止できるが、完全なキャンセルは不可
|
|
|
-- console.debugでfetch操作の追跡ログが出力される(本番では削除推奨)
|
|
|
-- 複雑な判定ロジックのため、今後の機能追加時は慎重にテスト
|