はじめに
任意の場所まで自動スクロールするには、標準のWebAPI
で提供されているElement.scrollIntoView()
が便利です。
チャットアプリで送受信に合わせて最新のメッセージまでスクロールしたい時などに使えます。
DOMのElement
はReactであればReact.useRef()
で取得することができます。
実装の例
任意の場所にスクロールしたい場合、あらかじめその場所に透明な<div/>
を仕込んでおくと便利です。
透明な<div/>
を長いリストの最後に仕込んでおくReact.useRef()
で透明な<div/>
の参照を取得透明な<div/>の参照に対して
Element.scrollIntoView()`を使用する
関数コンポーネント
const messageEndRef = React.useRef();
const scrollToLatest = (behavior = 'smooth') => messageEndRef.current.scrollIntoView({ behavior });
return (
<List>
{renderMessages()}
<div
style={{ float:"left", clear: "both" }}
ref={messagesEndRef}
/>
</List>
まとめ
- 標準の
WebAPI
で提供されているElement.scrollIntoView()
を使うと簡単に自動スクロールできます。 Element.scrollIntoView()
を使う対象として、透明な<div/>
を使う方法があります。
参考
Element.scrollIntoView() – Web API | MDNhttps://developer.mozilla.org