← Back to list
INS-308
バグ:イベントバトル後のエラー
StatusDone
TeamInstansys
Assigneeyasuhisa.hiraga@instansys.co.jp
PriorityHigh
Created2026/01/12 06:47
Completed2026/02/02 04:27
Archived2026/02/10 02:51
Bug
Description
最新のdevでホームに戻る、というエラーが以前あった。
それはなくなっているが、次の4ステージ目(バトル)をクリアしたらチャプターが終了し、チャレンジリザルト画面に進んでしまう。
Comments (1)
yasuhisa.hiraga@instansys.co.jp2026/01/28 01:35
修正した。
通常バトルで不具合が顕在化しなかった理由は以下の通り。
通常のバトルクリア:
const onBattleClear = useCallback(async (starStatus: string) => {
cleanupBattle();
// すぐにnavigateが実行される
navigate(`/stage/result/${stageId}/${starStatus}`);
}, [...]);
- navigateがすぐに呼ばれる
- 画面遷移によりBattleコンポーネントがアンマウントされる
- useBattleSystemフックも破棄される
- useEffectが再実行される前にコンポーネントが消える
イベントバトルクリア:
const onBattleClear = useCallback(async (starStatus: string) => {
cleanupBattle();
if (queryBattleMasterId && stageId) {
// awaitで待機している間、コンポーネントはまだ存在している
await trpcClient.mainQuest.completeStage.mutate({...});
navigate("/main-quest");
}
}, [...]);
- awaitでAPI呼び出しを待っている間、コンポーネントはまだマウントされている
- その間に状態更新やReactの再レンダリングが発生
- useEffectが再実行され、バトルクリア条件がまだ満たされているのでonBattleClearが再度呼ばれる
- これが連鎖的に繰り返される
つまり、awaitによる遅延が原因でした。通常のバトルでは即座に画面遷移するので問題が顕在化しませんでした。