FixedSizeList:数千項目のレンダリング
react-windowのFixedSizeListを高さが均一な行に設定し、データと接続します。
「FixedSizeList:数千項目のレンダリング」はCoddyKit上の無料React Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはReact Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 React Academyコースには全4レッスンが含まれています。
react-window のインストール
パッケージマネージャーを使って、プロジェクトに react-window を追加します。たとえば、react-window パッケージをインストールします。小規模で、重い依存関係はありません。
インストール後、必要なリストコンポーネントを import します。最も一般的なのは、すべての行の高さが同じ場合に使う FixedSizeList です。
FixedSizeList の必須 props
FixedSizeList を動作させるには、いくつかの props が必要です。height と width はスクロールコンテナのサイズを定義し、itemCount は存在する項目数を、itemSize は各行の高さをピクセル単位で指定します。
children prop は、1 行を描画する render 関数です。これらの値によって、コンポーネントは正しく windowing するために必要なジオメトリを把握できます。
行の render 関数
children の render 関数は、index と style を持つオブジェクトを受け取ります。index はレンダリングする項目を示すため、適切なデータを参照できます。style は仮想リスト内で行を配置します。
その 1 行分の JSX を返すと、react-window が現在ウィンドウ内にある行に対してのみこの関数を呼び出します。
重要な style prop
style prop は必須であり、行の要素に適用しなければなりません。react-window は各行を絶対位置に配置し、top を使って高さのあるスクロールコンテナ内の正しいオフセットに配置します。
style を適用しないと、すべての行が同じ位置に重なり、仮想化が見た目上機能しなくなります。
style を忘れるとすべてが壊れる
react-window で最もよくある間違いは、行に style prop を設定し忘れることです。行が上部で重なり、スクロールも正しく動作せず、リストが壊れているように見えます。
位置を正しく保つため、渡された style は必ず行の最も外側の要素にスプレッドするか、割り当ててください。
itemData によるデータの受け渡し
render 関数内で配列をクロージャとして参照する代わりに、itemData prop を介して渡すことができます。react-window はそれを index や style と同じように、data フィールドとして行に転送します。
これにより、行コンポーネントを疎結合に保てます。また、行がデータを明示的に受け取るため、メモ化にも役立ちます。
水平方向のリスト
FixedSizeList は、layout prop を horizontal に設定することで水平方向のリストに対応します。バージョンによっては direction オプションを使用します。この場合、itemSize は高さではなく幅を表します。
これは、多数の項目を含む水平方向にスクロールするカルーセルやタイムラインに便利です。
overscanCount
overscanCount prop は、表示ウィンドウのすぐ外側にある行を数行余分にレンダリングします。このバッファによって、高速スクロール中に新しい行がマウントされるまで空白が見える可能性を抑えられます。
小さな overscan は操作感を滑らかにしますが、大きすぎると画面外の行をマウントしすぎて、仮想化のメリットを損ないます。
レスポンシブなコンテナのための AutoSizer
FixedSizeList には明示的なピクセル単位のサイズが必要なため、レスポンシブなレイアウトでは扱いにくいことがあります。関連する AutoSizer コンポーネントは親要素のサイズを測定し、render prop を介して width と height をリストに渡します。
リストを AutoSizer でラップすると、サイズをハードコードせずに可変コンテナいっぱいに広げられ、レイアウトの変更にも適応できます。
FixedSizeList を組み立てる
動作する FixedSizeList では、height、width、itemCount、itemSize を設定し、style prop を適用する children 関数を通じて行をレンダリングします。必要に応じて AutoSizer からサイズを渡し、overscanCount でバッファを追加できます。
これで、リストの長さに関係なく、スクロール中は表示中の行だけがマウントされた状態になります。
クイックチェック: FixedSizeList の必須 props
行を正しくレンダリングするために、FixedSizeList に何を指定する必要があるか思い出してください。
まとめ: FixedSizeList
FixedSizeList は、height、width、itemCount、itemSize、および index と style を受け取る children の render 関数を使って、同じ高さの行をレンダリングします。style prop の適用は必須です。適用しないと行が重なります。
itemData でデータを渡し、水平方向のレイアウトに対応させ、小さな overscanCount バッファを追加してください。また、AutoSizer を使えば、サイズをハードコードせずにレスポンシブなコンテナいっぱいに広げられます。
よくある質問
「FixedSizeList:数千項目のレンダリング」レッスンは無料ですか?
はい。「FixedSizeList:数千項目のレンダリング」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、React Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 React Academyコースには全4レッスンが含まれています。
「FixedSizeList:数千項目のレンダリング」で何を学びますか?
react-windowのFixedSizeListを高さが均一な行に設定し、データと接続します。 ブラウザで直接実行するハンズオンコードでReact Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
React Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのReact Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「FixedSizeList:数千項目のレンダリング」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このReact Academyレッスンでコードを書いて実行できますか?
はい。すべてのReact Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 大規模リストのレンダリング問題
- FixedSizeList:数千項目のレンダリング
- VariableSizeList:行の高さを動的に扱う
- 仮想化とデータ取得の組み合わせ