クエリ駆動の UI 初期化 — 画面間導線で「地味に効く」テクニック
受付区分や処理種別が多い画面では、遷移元から URL クエリで初期状態を渡すだけで操作負荷が大きく下がります。ただし再描画・再遷移時の再適用には注意が必要、という話。
なぜ書いたか
業務系の画面では「新規登録」「変更登録」「抹消登録」のように 同じ画面で複数の処理種別を切り替える ことがよくあります。遷移元から「次の画面ではこの種別で立ち上げてほしい」を渡せると、ユーザーがいちいち選び直さなくて済みます。Blazorで素朴にやろうとすると、初期化と再描画のタイミング管理で詰まりやすいので、そのコツの話です。
やったこと
URLクエリで初期化情報を渡し、Blazor側の [SupplyParameterFromQuery] で受け取るシンプルな構成にしました。
@page "/{receiption}"
@code {
[SupplyParameterFromQuery(Name = "applyClass")]
public string? ApplyClass { get; set; }
protected override async Task OnInitializedAsync()
{
ApplyInitialState(ApplyClass);
}
protected override void OnParametersSet()
{
// 再遷移・パラメータ変更時にも反映する
ApplyInitialState(ApplyClass);
}
}
ポイントは OnInitializedAsync だけでなく OnParametersSet 側にも同じ初期化を入れることです。これがないと、同じ画面に 再遷移したときに古い状態のまま になる事故が出ます。
なぜ再適用が必要か
Blazor Serverでは、同じコンポーネントへの再遷移はインスタンスを保持したままパラメータだけが変わるケースがあります。OnInitializedAsync は最初の1回しか走らないので、2回目以降の遷移では古い状態が残ります。再描画ではなく 再パラメータ適用 が必要です。
なので初期化ロジックは「何度呼ばれても破綻しない」ように書く必要があります。冪等な初期化、つまり:
- 既に同じ状態が適用されていれば何もしない
- 状態が変わっていれば、上書きではなくリセットしてから適用する
- 副作用(APIコール)は必要なときだけ走らせる
わかったこと
- クエリ駆動の初期化はシンプルなのに、操作負荷の削減効果が大きい。ユーザーが「遷移直後に毎回同じ操作をする」のを1ステップ省ける
- ただし「動く」と「再入時に壊れない」は別の話。
OnParametersSet側のケアを忘れると地雷になります - AIに画面を作らせると
OnInitializedAsyncだけで済ませがちなので、レビュー観点に「再遷移時の挙動」を入れると安全です
次にやること / 未解決の問題
- クエリパラメータの命名が画面ごとに揺れている。
applyClass,mode,typeなどのバリエーションがあるので、命名ガイドを書きたい - 再遷移時に途中入力をどう扱うか(クリアするか保持するか)は画面ごとに方針が違う。ルール化したい
渡邊 賢
等差級数的Commit 運営 / ICD VIETNAM.LLC General Manager
AI駆動開発と段階的なレガシーモダン化をテーマに、日々の試行錯誤をこのブログに記録しています。
プロフィール詳細 arrow_forward似たような課題に困っている方、一緒に考えませんか。
AI駆動開発・Vibe Coding・レガシーマイグレーションに関するご相談を受け付けています。