はじめての React - ③ Ignite UI for React のチャートを表示させる

インフラジスティックス・ジャパン、テクニカル コンサルティング チームの oquiron です。
<p>「はじめての React」シリーズでは <a href="https://ja.reactjs.org/" target="_blank" rel="noreferrer noopener">React</a> が初めての人向けに React のアプリケーションの作成方法を順に説明したいと思います。Hello World から始めてインフラジスティックス製品の <a href="https://jp.infragistics.com/products/ignite-ui-react" target="_blank" rel="noreferrer noopener">Ignite UI for React</a> のグリッドやチャートを配置するところまでを目指します。</p>
<p>この記事は第 3 回目。最終回です。Ignte UI for React のチャートを表示させるところまで進めていきます。</p>

#連載目次
<ol>
<li>開発環境を整える。</li>
<li>React のアプリケーションを動かしてみる。</li>
<li>"Hello World!" と表示されるように書き換える。（ここまでが前々回の記事「<a href="https://qiita.com/oquiron/items/3478bea2965c55d1e7f2" target="_blank" rel="noreferrer noopener">はじめての React ①</a>」）</li>
<li>Ignite UI for React のグリッドを配置する。（これが前回の記事「<a href="https://qiita.com/oquiron/items/783ee5b4a3ce04fdcac0" target="_blank" rel="noreferrer noopener">はじめての React ②</a>」）</li>
<li><a href="#Index5">Ignite UI for React のチャートを配置する。（←今回はここ）</a></li>
</ol>
<p>前回までに作成したアプリケーションに付け足す形で進めます。今回この記事が初めてという場合は、あらかじめ、前々回と前回の記事を見ながら、アプリケーションを作成してください。</p>
<h1 id="Index5">5. Ignite UI for React のチャートを配置する。</h1>
<p>Ignite UI for React のチャートはデータをグラフ形式で表示することができます。今回は、<a href="https://jp.infragistics.com/products/ignite-ui-react/react/components/data-chart.html" target="_blank" rel="noreferrer noopener">データ チャート</a>を使用して、グリッドに表示したデータを棒グラフで表示させてみましょう。</p>
<h2>データ チャートに必要なパッケージをインストールする。</h2>
<p>データ チャートに必要なパッケージは以下の 2 つです。</p>
<ul>
<li>igniteui-react-core</li>
<li>igniteui-react-charts</li>
</ul>
<p>npm の install コマンドを使用してインストールします。プロンプトで次のコマンド順にを実行します。</p>

```shell
> npm install --save igniteui-react-core
> npm install --save igniteui-react-charts
```

<h2>MyDataChart コンポーネントを作成する。</h2>
<p>前回の「はじめての React - ① Hello World」で HelloWorld コンポーネントを作成したのと同じ手順で、src フォルダーの直下に MyDataChart コンポーネントを作成します。</p>
![26006613685912339_MyDataChartComponent_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784790/5b82ab74-666f-7976-17ea-dfe84d8eb132.png)
<p>新規作成した MyDataChart.tsx を開き、以下のコードを貼り付け、保存します。</p>

```javascript
// src/MyDataChart.tsx
import * as React from 'react';

// ①IgrDataChartに必要なモジュールをインポートする。
// 軸のモジュール
import { IgrNumericYAxis } from 'igniteui-react-charts';
import { IgrCategoryXAxis } from 'igniteui-react-charts';
// シリーズのモジュール
import { IgrColumnSeries } from 'igniteui-react-charts';
// データチャートのモジュール
import { IgrDataChart } from 'igniteui-react-charts';
import { IgrDataChartCoreModule } from 'igniteui-react-charts';
import { IgrDataChartCategoryModule } from 'igniteui-react-charts';

// ②IgrDataChartに必要なモジュールを登録する。
IgrDataChartCoreModule.register();
IgrDataChartCategoryModule.register();

// ③Reactのコンポーネントを拡張してMyDataChartクラスコンポーネントを定義する。
export default class MyDataChart extends React.Component {
    public data: any[];

    // ④MyDataChartクラスコンポーネントのコンストラクター
    constructor(props: any) {
        super(props);

        // ⑤IgrDataChartに表示するデータを生成する。
        this.data = [
            {"Year": "1920", "Population": 55963053 },
            {"Year": "1930", "Population": 64450005 },
            {"Year": "1940", "Population": 73114308 },
            {"Year": "1950", "Population": 84114574 },
            {"Year": "1960", "Population": 94301623 },
            {"Year": "1970", "Population": 104665171 },
            {"Year": "1980", "Population": 117060396 },
            {"Year": "1990", "Population": 123611167 },
            {"Year": "2000", "Population": 126925843 },
            {"Year": "2010", "Population": 128057352 },
        ];
    }

    // ⑥MyDataChartクラスコンポーネントの描画を実装する。
    public render() {
      return(
          <div style={{margin: "1em"}}>
            {/*
              ⑦IgrDataChartを配置する。
            */}
            <IgrDataChart
              dataSource={this.data}
              width="100%"
              height="300px">
              {/* 軸 */}
              <IgrCategoryXAxis name="xAxis" label="Year" />
              <IgrNumericYAxis  name="yAxis" minimumValue="0" />
              {/* シリーズ */}
              <IgrColumnSeries
                name="series1"
                xAxisName="xAxis"
                yAxisName="yAxis"
                valueMemberPath="Population" />
              </IgrDataChart>
            </div>
        );
    }
}
```

<h2>MyDataChart コンポーネントを画面に配置する。</h2>
<p>HelloWorld コンポーネントを画面に配置したときと同じように、src/App.jsx を開いて MyDataChart コンポーネントのインポートと配置をします。</p>

```javascript
// src/App.tsx
import React from 'react';
import HelloWorld from './HelloWorld';
import './App.css';

import MyGrid from './MyGrid';
import MyDataChart from './MyDataChart';  // ①MyDataChartコンポーネントをインポートする。

function App() {
    return (
        <div className="App">
          {/* <HelloWorld /> */}  {/* HelloWorldはもう不要なのでコメントアウトしています。 */}
          <MyGrid />
          <MyDataChart /> {/* ②MyDataChartコンポーネントを画面上に配置する。 */}
          <div>
            *データソース:
            総務省 平成27年国勢調査 最終報告書「日本の人口・世帯」統計表 より
          </div>
        </div>
    )
}

export default App;
```

<h2>React.StrictMode の設定を外す。</h2>
<p>現在データ チャートは React.StrictMode では動作しません。修正対応中ではありますが、当面の間、React.StrictMode の設定を外すことで動作させることができるようになります。</p>

```javascript
// src/index.tsx
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';

ReactDOM.render(
  // <React.StrictMode>
    <App />,
  // </React.StrictMode>,
  document.getElementById('root')
);

// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();
```

<p>ファイルをすべて保存して、プロンプトを開き、"npm start" を実行します。ブラウザーに</p>
<ul>
<li>データテーブル</li>
<li>棒グラフ</li>
</ul>
<p>が表示されていれば OK です！</p>
![26006613685912339_MyDataChartComponent_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784790/9984d916-7b84-f4ce-5d12-e276c8588dff.png)

<h1>最後に</h1>
<p>以上、3 回にわたって Hello World から Ignite UI for React のグリッドやチャートの表示まで見てきました。</p>
<p>発展問題として、グリッドもチャートも同じデータを表示していますので、データサービスのようなものを作成してグリッドもチャートもそこからデータを受け取るようにしてみると良いと思います。</p>
<p>この記事に関して何かご質問・ご不明な点がありましたら、お気兼ねなく<a href="https://jp.infragistics.com/about-us/contact-us" target="_blank" rel="noreferrer noopener">インフラジスティックス</a>までお問い合わせください。</p>