SpreadsheetGrid
ガイド

大量データと固定列

100,000 行の仮想化と 3 ペイン固定列(pinned)

グリッドは行・列ともに仮想化されており、DOM 化されるのは可視域 + オーバースキャンぶんだけです。クライアントサイド行モデルで約 100 万行まで扱えます。

デモ(100,000 行)

100,000 行(クライアント生成)
ToolbarRows: 100000 / 100000Columns: 8 / 8Sort: なし
#
ID
1
1
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
9
10
10
11
11
12
12
13
13
14
14
15
15
16
16
17
17
18
18
19
19
20
20
21
21
状態
廃番
有効
有効
停止
廃番
有効
廃番
停止
廃番
停止
廃番
廃番
停止
有効
有効
廃番
停止
廃番
停止
有効
廃番
Rows: 100000 / 100000Columns: 8 / 8
Active: なしSelection: なしCells: 0 / Rows: 0Cols: 0
  • ID 列は左に、状態 列は右にピン留めされています(pinned: 'left' | 'right')。横スクロールしても固定されたままです。
  • 「50,000 行目へ」ボタンは命令的ハンドルの scrollToRow(49999, { align: 'center' }) を呼んでいます。
  • 在庫金額列は getValue による計算列(数量 × 単価)で、numberFormatter() により 3 桁区切り表示です。
  • フィルター / ソート / グローバルフィルターも 100,000 行に対してそのまま機能します。

列のピン留め

const columns: GridColumn<Row>[] = [
  { key: 'id', title: 'ID', width: 90, pinned: 'left' },
  // ...中央スクロール列...
  { key: 'status', title: '状態', width: 100, pinned: 'right' },
]

レイアウトは左 / 中央 / 右の 3 ペイン構成(sticky ベース)で、固定列は常に可視です。scrollToCell は固定列に対しては横スクロールしません。

大きなデータでの注意点

  • rows参照の安定が重要です。onRowsChange で受け取った配列はそのまま state に戻してください(map で作り直すと未変更行の構造共有が失われ、undo 履歴も破棄されます)。
  • グローバルテキストフィルターは 50,000 行を超えると自動的に時間分割適用へ切り替わり、入力中もメインスレッドをブロックしません(適用中はグリッドが組み込みオーバーレイを表示)。
  • 行の可変高(autoHeight)は計測コストが増えるため、超大規模データでは固定行高を推奨します。
  • データがサーバにある場合はサーバーサイド行モデル(SSRM)を使うと、可視域近傍のブロックだけを取得してメモリを有界化できます。

On this page