Skip to content

問題集一覧・区分をリロードなしで表示できるようにしましょう #3338

Closed

Description

@KATO-Hiro

WHY

  • Problems や yosupo judge などのような UI / UX が期待されるため
  • NS としても、これまでと同等の(ry

Activity

  1. KATO-Hiro commented on Apr 1, 2026

    @KATO-Hiro
    CollaboratorAuthor

    背景・経緯

    PR #3296 で /workbooks のボタンクリックを goto() + URL パラメータ変更に移行した結果、$navigating が truthy になるたびにコンテンツ全体が <SpinnerWrapper /> に置き換わるチラつきが発生。


    アプローチ選択と決定

    観点 A: スピナー条件修正(採用) B: pushState + invalidate
    変更ファイル数 1 3
    テスト追加 不要 要確認
    UX 古いコンテンツが見えたまま更新 同上(差異はほぼなし)
    適用範囲 サイト全体に波及(layout 変更) workbooks ページのみ

    A を採用。変更が最小で 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 的に十分と判断。

  2. added 2 commits that reference this issue on Apr 1, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions