5分で反応フックと反応データグリッドから始められます
以前のブログ記事では、反応のクラスを使用する方法を示しました.get started in 5 minutes and customising react data grid , このポストでは、我々はフックを使用して取得し、反応データグリッドを使用するコンポーネントを最適化する方法を開始します.
フックを使用するReact features from functions それで、あなたはこの取得ガイドでどんなクラスも見ません.
Creating Project From Scratch
Optimising React Data Grid for Hooks
ビデオチュートリアル
コード例
このブログ記事の例を実行したいなら、githubのリポジトリを見つけることができます.
getting-started-5-mins-hooks
ディレクトリcd getting-started-5-mins-hooks
npm install
npm start
プロジェクトの作成
これは私が開始するために絶対的な基本的なステップを要約します.
npx create-react-app getting-started-5-mins-hooks
cd getting-started-5-mins-hooks
npm install --save ag-grid-community ag-grid-react
npm start
グリッドコンポーネントの作成
私のすべてのコードを追加するよりも
App.js
私は、AGグリッドを使用してデータをレンダリングするコンポーネントを作成するつもりです.私は私の基本的な車のデータを使用しますので、私は修正しますApp.js
私たちにCarsGrid
.function App() {
return (
<CarsGrid />
);
}
書き込みますCarsGrid
インcarsgrid.js
ファイルをインポートします.import {CarsGrid} from `./carsgrid`
カーグリッド.js
の内容
carsgrid.js
それは取得と同じくらい基本的です.インポートします
React
そして、私が使用するAgグリッド機能import React, {useState} from 'react';
import {AgGridColumn, AgGridReact} from 'ag-grid-react';
import 'ag-grid-community/dist/styles/ag-grid.css';
import 'ag-grid-community/dist/styles/ag-theme-alpine.css';
それから私はグリッドにロードするデータを作成します.最初に、これを単純な配列として作成します.const InitialRowData = [
{make: "Toyota", model: "Celica", price: 35000},
{make: "Ford", model: "Mondeo", price: 32000},
{make: "Porsche", model: "Boxter", price: 72000}
];
最後に、私の反応コンポーネントのJavaScript関数を作成します.rowData
export function CarsGrid() {
// set to default data
const [rowData, setRowData] = useState(InitialRowData);
return (
<div className="ag-theme-alpine" style={{height: 400, width: 600}}>
<AgGridReact
defaultColDef={{sortable: true, filter: true }}
pagination={true}
rowData={rowData}
>
<AgGridColumn field="make"></AgGridColumn>
<AgGridColumn field="model"></AgGridColumn>
<AgGridColumn field="price" editable={true}></AgGridColumn>
</AgGridReact>
</div>
)
};
これは私にデータをレンダリングする非常に基本的なグリッドを与えます.AG Gridは多くの機能を提供していますので、以下のような機能を有効にします.
インセル編集
セルを編集可能にするには、カラム定義を変更して追加属性を指定します.
editable={true}
例えば<AgGridColumn field="price" editable={true}></AgGridColumn>
これは、価格セルを編集可能になります.ソートとフィルタリング
カラムをソート可能であるかフィルタリング可能にするには、再びカラムに属性を追加します.
<AgGridColumn field="make" sortable={true}></AgGridColumn>
<AgGridColumn field="model" filter={true}></AgGridColumn>
しかし、私はむしろソート可能で、フィルタリング可能であるすべてのコラムを構成したいです、そして、私は格子自体でデフォルトコラム定義を加えることによってそれをすることができます.
<AgGridReact
defaultColDef={{sortable: true, filter: true }}
データグリッド
グリッドにページ付けを追加したいなら、グリッド上の単一の属性でこれを有効にすることができます
pagination={true}
. <AgGridReact
defaultColDef={{sortable: true, filter: true }}
pagination={true}
しかし、このような少量のデータを用いて、グリッド上にページ化、ソート、フィルタリングを行う点は全くありません.私がグリッドにデータをロードするとすぐに、私たちは、次に、Agグリッドのような反応データグリッドを使用する利点のいくつかを見ることができます.
React.useEffect(() => {
fetch('https://www.ag-grid.com/example-assets/row-data.json')
.then(result => result.json())
.then(rowData => setRowData(rowData))
}, []);
多くのデータをグリッドにロードすることで、別の機能は、我々は無料のAGグリッドを取得します.
私が初期化されていない状態を修正するならば、Ag格子はAを表示します
loading...
メッセージをサーバーからグリッドにロードします.const [rowData, setRowData] = useState();
フックのための反応データグリッドの最適化
この時点では、ブログのポストのほとんどの地面をカバーしているclass based getting started post .
コンポーネントを最適化する方法はいくつかあります.
オブジェクトとしてのカラム定義
現在、グリッドは宣言的に定義された列定義を持っています.
<AgGridColumn field="make"></AgGridColumn>
<AgGridColumn field="model"></AgGridColumn>
<AgGridColumn field="price" editable={true}></AgGridColumn>
これは、実行時にグリッドをカスタマイズするために私に利用可能な柔軟性を減らします.私が列定義を調整したいならば、私は州を経たオブジェクトとして彼らをセッティングするより良いでしょう.
const [colDefs, setColDefs] = useState([
{field: 'make'},
{field: 'model'},
{field: 'price', editable: 'true'},
]);
そして、私のグリッドの状態を使用する修正. <AgGridReact
defaultColDef={{sortable: true, filter: true }}
pagination={true}
rowData={rowData}
columnDefs={colDefs}>
</AgGridReact>
この方法では、状態から列を追加または削除したり、属性を調整したり編集したり、カスタムレンダリングを行うことができます.このようにフックを使った完全な機能部品は次のようになります.
import React, {useState} from 'react';
import {AgGridColumn, AgGridReact} from 'ag-grid-react';
import 'ag-grid-community/dist/styles/ag-grid.css';
import 'ag-grid-community/dist/styles/ag-theme-alpine.css';
export function CarsGrid() {
const [rowData, setRowData] = useState();
const [colDefs, setColDefs] = useState([
{field: 'make'},
{field: 'model'},
{field: 'price', editable: 'true'},
]);
React.useEffect(() => {
fetch('https://www.ag-grid.com/example-assets/row-data.json')
.then(result => result.json())
.then(rowData => setRowData(rowData))
}, []);
return (
<div className="ag-theme-alpine" style={{height: 400, width: 600}}>
<AgGridReact
defaultColDef={{sortable: true, filter: true }}
pagination={true}
rowData={rowData}
columnDefs={colDefs}
>
</AgGridReact>
</div>
)
};
追記によるレンダリングの削減
実行時に列定義を更新したくない場合は、宣言の定義に戻る必要はありません.
オブジェクトを使用して、より長い期間を維持するコードを簡単にします.しかし、我々は必要以上にレンダリングサイクルを必要以上に追加しないことを確認するために、それらを覚えるべきです.
AG Grid Reaction Data Gridは既にレンダリングに適していますが、典型的な実世界での使用では、独自のスタイルと構成のために独自のコンポーネントでAGグリッドをラップします.
私は
colDefs
次のようになります. const colDefs = useMemo( ()=> [
{field: 'make'},
{field: 'model'},
{field: 'price', editable: 'true'},
], []);
列定義は定数であり、親コンポーネントの変更を再描画するトリガをしません.詳細データグリッド
もう長いGetting started guide in our documentation また、選択、グループ化、テーマの変更をカバーします.
また、研究にいくつかの反応例がありますshow more use cases of AG Grid .
この投稿のコードはreact-data-grid レポin
getting-started-5-mins-hooks
フォルダ.Reference
この問題について(5分で反応フックと反応データグリッドから始められます), 我々は、より多くの情報をここで見つけました https://dev.to/ag-grid/getting-started-with-react-hooks-and-react-data-grid-in-5-minutes-32n4テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol