<ScrollRestoration>
このコンポーネントは、loader
が完了した後の場所の変更時に、ブラウザのスクロール復元をエミュレートします。これにより、ドメイン間であっても、正しい場所に、正しいタイミングでスクロール位置が復元されます。
これは、<Scripts/>
コンポーネントの直前に、1つだけレンダリングする必要があります。
Props
getKey
オプション。スクロール位置を復元するために使用されるキーを定義します。
説明
location.key
を使用すると、ブラウザのデフォルトの動作をエミュレートします。ユーザーはスタック内で同じURLに複数回移動できますが、各エントリには復元するための独自のスクロール位置が設定されます。
一部のアプリでは、この動作をオーバーライドして、別のものに基づいて位置を復元する必要がある場合があります。4つの主要なページを持つソーシャルアプリを考えてみましょう。
- "/home"
- "/messages"
- "/notifications"
- "/search"
ユーザーが"/home"から始めて少しスクロールし、ナビゲーションメニューで"messages"をクリックし、次にナビゲーションメニューで"home"をクリックした場合(戻るボタンではなく)、履歴スタックには3つのエントリがあります。
1. /home
2. /messages
3. /home
デフォルトでは、React Router(およびブラウザ)は、同じURLを持っているにもかかわらず、1
と3
に2つの異なるスクロール位置を保存します。つまり、ユーザーが2
→3
に移動すると、スクロール位置は1
の位置に復元されるのではなく、トップに移動します。
ここで、堅実な製品の決定は、ユーザーがどのように移動しても(戻るボタンか新しいリンクをクリックするか)、ホームフィードのユーザーのスクロール位置を維持することです。そのためには、location.pathname
をキーとして使用する必要があります。
または、一部のパスに対してのみパス名を使用し、他のすべてのパスに対しては通常の動作を使用することもできます。
nonce
<ScrollRestoration>
は、スクロールのちらつきを防ぐために、インライン<script>
をレンダリングします。nonce
プロパティは、スクリプトタグに渡され、CSP nonceの使用を許可します。
スクロールリセットの防止
新しい場所に移動すると、スクロール位置はページの上部にリセットされます。リンクとフォームから「スクロールトップ」動作を回避できます。