## WHY - Problems や yosupo judge などのような UI / UX が期待されるため - NS としても、これまでと同等の(ry
Activity
KATO-Hiro commentedon Apr 1, 2026
背景・経緯
PR #3296 で
/workbooksのボタンクリックをgoto()+ URL パラメータ変更に移行した結果、$navigatingが truthy になるたびにコンテンツ全体が<SpinnerWrapper />に置き換わるチラつきが発生。アプローチ選択と決定
pushState+invalidateA を採用。変更が最小で UX として十分。B は「素早い連続クリックが多い場合」に有効だが現時点ではオーバーエンジニアリング。
設計検討 Q&A
Q1.
$app/stateのnavigating— なぜfrom !== nullで判定するのか?$app/storesはナビゲーション中でないとき$navigating === null(オブジェクトごと null)。$app/stateはオブジェクトが常に存在し、navigating.from === nullが非ナビゲーション状態を表す。以前
$app/stateで動かなかったのはfrom !== nullの判定を入れていなかったため。Q2. スピナー修正で「変わった部分だけ再計算」は根本解決できるか?
チラつきは解消されるが、サーバーへのラウンドトリップはなくならない(
goto()のたびにload()が再実行される)。サーバーリクエスト自体をなくすにはクライアントサイドフィルタリングへの設計変更が必要だが、今回のスコープを超える。A 案で UX 的に十分と判断。refactor: Remove old plan (#3338)
Merge pull request #3340 from AtCoder-NoviSteps/#3338