まあまあ多機能でカスタマイズしやすいReact製データグリッドライブラリ：react-data-grid（2024.09）

# １．Reactのデータグリッドライブラリは意外と使いやすいものが少ない

ExcelやGoogleスプレッドシートみたいに、表形式で値を表示してくれるデータグリッド。

これをゼロから作るのは大変です。なので、ライブラリをつかって実装するのが効率的だと思います。

React製のデータグリッドライブラリには、いくつか有名なものがあります。ただ、ライセンスの問題があったり、カスタマイズがめんどくさかったりします。

有名なライブラリについては、生成AIサービスのPerplexityやGenSparkで「有名なReact製のデータグリッドライブラリを教えて」と質問すればでてくると思います。

https://www.perplexity.ai/

https://www.genspark.ai/

Perplexityの回答内に、ライセンスもMITで、カスタマイズもしやすく、意外と多機能で使いやすい「react-data-grid」というのがありました。Githubのスターも6.9kと意外と評価が高いです。

https://github.com/adazzle/react-data-grid

この記事では、このライブラリの紹介を行います。
もし、これに相当するぐらい使いやすいのがあれば、コメントにて教えて頂ければありがたいです。

# ２．react-data-gridの良さ

WebサイトはGithubしかなく、デモサイトがあるだけです。
なので公式の情報発信としては弱いなという気がします。
あとドキュメントも少ないです。ここがデメリットだと思います。
ですが、とりあえずサンプルコードを見れば実装はできます。


https://adazzle.github.io/react-data-grid/#/all-features

## ２．一般的に実装したいと思う機能が比較的簡単に実装できる

機能的には意外と豊富だなと思います。
個人的に業務アプリをつくるうえでよく使う機能や便利だなと思ったものを紹介します。

### セレクトボックス

意外と無料だと使えないものがあったりします。
カスタマイズのセルエディタが必要ですが、比較的簡単に実装できます。

![selectbox.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15972/51a53240-c5fe-ae23-4ba3-c98db9f8380f.gif)

実装は、以下のサンプルコードに従えばできます。

https://github.com/adazzle/react-data-grid/blob/main/website/demos/renderers/renderDropdown.tsx


### ドラッグ&ドロップで列の並びを変更


![col-order.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15972/c8b55cfa-45e5-41a7-aeb4-b16da91f8343.gif)

デモページは以下。

https://adazzle.github.io/react-data-grid/#/columns-reordering


### ドラッグ&ドロップで行の並びを変更


![row-order.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15972/7690dd56-ff89-f815-0f63-db7cc1abada2.gif)

デモページは以下。

https://adazzle.github.io/react-data-grid/#/rows-reordering


### 無限スクロール

![infinit.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15972/2be6493e-70a4-5645-2e31-a2e986ef858c.gif)


デモページは以下。

https://adazzle.github.io/react-data-grid/#/infinite-scrolling

### フィルター

![filter.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15972/aa8459b3-7390-6170-31bc-7742ffdd718a.gif)

デモページは以下。

https://adazzle.github.io/react-data-grid/#/header-filters

### コンテキストメニュー（右クリックで開くメニュー）


![context.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15972/bbb606fb-b8a6-fb10-40af-2332e35160e3.gif)

デモページは以下。

https://adazzle.github.io/react-data-grid/#/context-menu


### 明細テーブル

![child.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15972/fc3b68f9-6657-5006-3d50-a2215f193362.gif)

デモページは以下。

https://adazzle.github.io/react-data-grid/#/master-detail

### オートフィル（ドラッグして連続貼り付け）

![fill.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15972/5a6d9c8b-b3ff-caa2-cc4d-492dacab714c.gif)


デモページは以下。

https://adazzle.github.io/react-data-grid/#/all-features


## 依存関係が少なく、比較的コードがわかりやすく、カスタマイズしやすい

有名なものの中には、見た目はいいけど、依存関係の多いものがあります。これはカスタマイズも大変です。react-data-gridは依存関係が少ないです。その代わり、見た目はぱっとしないところがありますのでカスタマイズで見た目を調整する必要があります。

他のデータグリッドライブラリも触ってみたのですが、そもそものコードがわかりにくく、カスタマイズしにくいものもありました。
このライブラリは比較的、元のコードもわかりやすく、サンプルもつけてくれているのでコードが読める人ならカスタマイズはしやすいと思います。

Githubのデモソースが参考になります。

https://github.com/adazzle/react-data-grid/tree/main/website/demos


# Reactのコンポーネントをラッピングして使えるPython製ライブラリReflexでも取り込めた

最近、業務アプリの開発では、PythonをコーディングするだけでWebアプリが作れるライブラリのReflexを使っています。
こちらのライブラリは、ReactのコンポーネントをラッピングしてPythonのコーディングで使うことができます。

こちらのライブラリでも、react-data-gridは使えました。それはまた別記事で記載します。


https://github.com/reflex-dev/reflex


以上、react-data-gridの紹介でした。