マルチステップフォームとコンテキスト保存
1)原則
1.一つの目標は、いくつかの自然なステップです。データベーステーブルではなく、ユーザーロジックで割る:「データ→確認→完了」。
2.各ステップは完全な意味です。あまりにも細かく粉砕しないでください:3-5ステップが最適です。
3.遷移はコンテキストをリセットしないでください。すべてのフィールド、選択、およびファイルが保存されます。
4.私は戻ってみましょう。バック-データの損失はありません。
5.進捗状況を追跡します。プログレスバー、ステップヘッダー、クリアCTA。
6.ユーザーは去り、戻ることができます。ドラフト-ローカルまたはサーバー上。
2)マルチステップアーキテクチャ
クライアント状態:ローカルストア(React Context/Redux/Signalなど)または一時ストレージ('sessionStorage'、 IndexedDB)。
サーバー状態:'draft_id'でドラフトを作成し、各ステップの後に保存します。
セキュリティ:'draft_id'はユーザーに関連付けられ、N時間で期限切れになります。データは残りで暗号化されます。
- 'currentStep'-現在のステップのインデックス。
- 'completedSteps'-完了したリスト;
- 'errors'-ステップごとのエラー;
- 'progress=current/total'
js const formState = {
draftId: "d-84f...",
currentStep: 2,
steps: [ { id: "personal", completed: true }, { id: "kyc", completed: false } ],
data: { name:"", idPhoto:null },
lastSaved: Date. now()
}
3)ステップおよびレイアウトの設計
構造:上からの垂直ナビゲーション(デスクトップ)/プログレスバー(モバイル)。
ステップの表示名は「1」です。個人データ」「、2。アイデンティティの証明"
CTAボタン:- メインは「Next「/」Continue「です。
- セカンダリ-「戻る」。
- 最後のステップで-「完了「/」送信「。
- 'aria-current=」step」'を使用します。
- ステップが不均等な場合は%を表示します。
- 「後で戻ってくることができます」プロンプトを追加します。
4)コンテキストとデータの保存
オートセーブ(Autosave)
保存するとき:- フィールド変更(500-1000ミリ秒のデバンクで);
- 次のステップへ移動
- タブフォーカスの損失。
- locally ('localStorage '/IndexedDB)-フォームが短い場合;
- サーバー-CCM/支払/アンケート用。
js const saveDraft = debounce(async (data) => {
await fetch('/api/draft', { method:'POST', body: JSON. stringify(data) });
}, 800);
リカバリ
フォームを開くときは、ドラフト('draft_id'またはローカルキー)を探します。
復元するオファー:- 競合の場合(新しいフィールド)-変更を強調した「更新ドラフト」。
5) UX遷移パターン
ローカルステップの検証後にのみ前進します。
バック-データ損失がない場合の確認なし。
ネットワークエラーの場合は、ローカルに保存し「、次の接続で復元」を表示します。
URLを任意に変更しないでください:'/form/step/2'→ナビゲーション/回復に便利です。
次のステップへの素早い移行のために'Ctrl+Enter'をサポートします。
6)状態と視覚的な手がかり
進行中:グレー/アクティブインジケータ、ステップは前のものが完了した場合にのみクリック可能です。
完了:緑色のティック/アイコン。編集のために開くことができます。
エラー:赤いアウトライン、フィールドと進行中の行の下のテキスト。
「無効」(Disabled)-現在のステップが非表示または使用不可になった後のステップ。
html
<nav aria-label = "Progress">
<ol class="steps">
<li class = "done "> <span> 1 </span> Data </li>
<li class = "current" aria-current = "step "> <span> 2 </span> Documents </li>
<li> 3 Verification </li>
</ol>
</nav>
7) A11yと可用性
'aria-current=」step」'をアクティブなステップに設定します。
ステップの変更は「、aria-live=」polite「」によって発声されます。
現在のステップ内の焦点を保って下さい;移行中-ヘッダーに移動します。
タブと入力ナビゲーションは予測可能です。Escはコンテキストを失うべきではありません。
ステップバイステップの進捗バーでは「、role=」list「」、role=「listitem」「、aria-label」を使用します。
8)エラーと割り込み動作
ネットワーク障害:"接続が失われました。データはローカルに保存されます。
タイムアウト:3-5秒で自動的に繰り返します。失敗-オフラインドラフト。
セッションブレイク: ログイン後→「最後のステップから続ける」
ステップエラー:部分的に入力されたフィールドを保存し、問題のあるフィールドを強調表示します。
9)パラレルセッションとセキュリティ
'draft_id'はユーザごとに一意です。
新しいタブを開いたとき-suggest"別のセッションが開いています。ここで更新または続行します。
CCM/財務フォームでは、データはドラフトを保存する前にクライアント(AES/GCM)で暗号化されます。
TTLで下書きを削除します(例えば、7日間の非活動状態)。
10) iGamingシナリオの例
10.1 CCM/検証
1.個人データ→2。ドキュメント→3。チェック→4。完了しました。
写真をアップロードした後に自動保存します。
休憩後のテストステップからの回復。
ステータス「確認待ち」インジケータ付き。
10.2支払/沈殿物
ステップ:1。金額→2。方法→3。確認してください。
メソッドデータはセッション間に保存されます。
金額をクリアせずにメソッド選択に戻ることができます。
10.3制限の設定
ステップはリミットタイプ→値→確認です。
進行状況は残りのステップを示します。
完了後-画面「で有効になります……。」
11)メトリクスとコントロール
完了率:すべてのステップを完了したユーザーの%。
ステップごとのドロップオフ:彼らはどのステップを残します。
1ステップあたりの平均時間。完了までの時間。
自動セーブ成功率。
エラー回復率-障害発生後の回復に成功した割合。
12) Antipatterns
「バック」なしのハードナビゲーション。
再起動時の入力の損失。
コンテキストなしでステップを飛び越えます。
10画面ごとに1つの一般的な提出。
ステップエラー-そして「再起動」。
ネットワーク障害後の空白画面。
セマンティック名のないプログレスバー(「1/4/7」……)。
13)システムトークンの設計(例)
json
{
"steps": {
"radius": 10,
"gap": 8,
"barHeight": 4,
"activeColor": "#2B9F5E",
"inactiveColor": "#E0E0E0"
},
"autosave": {
"debounceMs": 800,
"retryMs": 3000,
"ttlDays": 7
},
"a11y": {
"ariaLive": "polite",
"focusBehavior": "scrollToTitle"
}
}
CSSプリセット
css
.steps { display:flex; gap:8px; list-style:none; counter-reset:step; }
.steps li { position:relative; flex:1; text-align:center; }
.steps li::before { counter-increment:step; content:counter(step); display:block; width:24px; height:24px; line-height:24px; margin:0 auto 4px; border-radius:50%; background:var(--inactive); color:#fff; }
.steps li. done::before { background:var(--success); }
.steps li[aria-current="step"]::before { background:var(--primary); }
14) QAチェックリスト
保存と復元
- 各ステップでドラフトが作成され、更新されます。
- 再起動すると、リカバリが利用可能で正しい。
- バージョンの競合が処理されています(古い/新しい形式)。
ナビゲーション
- 「戻る」はデータを失うことはありません。
- URLは現在のステップに対応しています。
- ステータスと同期したプログレスバー。
ネットワークとオフライン
- オフラインでローカルに保存され、オンラインで復元されます。
- 失敗メッセージは理解可能で非破壊的です。
A11y
- 'aria-current=」step」、' aria-live=「polite」 'work。
- フォーカスはステップヘッダーに移動します。
パフォーマンス
- 遷移は瞬時(≤ 100ms)です。
- 非同期セーブはUIをブロックしません。
15)設計システムにおけるドキュメンテーション
-'StepIndicator'、 'MultiStepForm'、 'AutosaveBanner'、 'DraftRecoveryModal'。
コンテキスト(ローカルとサーバー)、A11yおよびARIA属性を格納するためのガイド。
UXテンプレート:KYC、デポジット、リミット、アンケート、エラー後のリターン。
Do/Don 't with examples of network failure and successful recov。
概要
マルチステップフォームは、ユーザーが気を散らしたり、ページをリブートしたり、ネットワークを失ったりしても、継続的なプロセスのように感じるはずです。自動保存、リカバリ、可視化された進捗状況、安全なリトレイにより、複雑なシナリオ(KYC、支払い、制限)が予測可能で信頼できるエクスペリエンスに変わります。