はじめに
ReactHooksでBMI計算で1日ごとの結果を一覧で表示する(redux/useContext使用)を作成したので、そのデータをグラフで表示してみる。 下記のサンプルは下記の過去記事を続きの実装となります。
利用したパッケージは下記の2つとなります。
yarn add react-chartjs-2 chat.js
実装コード
components/bmi/BmiLine.js
ファイルはグラフ表示部分
import React,{useState, useContext} from 'react' import {Line} from 'react-chartjs-2'; import moment from 'moment' import AppContext from '../../contexts/AppContext' const BmiLine = () => { const {state, dispatch } = useContext(AppContext) const labelData = [...Array(14)].map((_, i) => moment().add('days', -i).format("YYYY-MM-DD") ) labelData.sort() const oustputBmiData = labelData.map(date => { const bmi = state.bmis.filter(bmi => bmi.measurementDate === date) return bmi.length === 0 ? null : bmi[0].resultBmi }) const oustputWeightData = labelData.map(date => { const bmi = state.bmis.filter(bmi => bmi.measurementDate === date) return bmi.length === 0 ? null : bmi[0].bodyWeight }) const data = { labels: labelData, datasets: [ { fill: true, lineTension: 0.1, backgroundColor: 'rgba(75,192,192,0.4)', borderColor: 'rgba(75,192,192,1)', borderCapStyle: 'round', borderDash: [], borderDashOffset: 0.0, borderJoinStyle: 'square', pointBorderColor: 'rgba(75,192,192,1)', pointBackgroundColor: '#eee', pointBorderWidth: 10, pointHoverRadius: 5, pointHoverBackgroundColor: 'rgba(75,192,192,1)', pointHoverBorderColor: 'rgba(220,220,220,1)', pointHoverBorderWidth: 1, pointRadius: 1, pointHitRadius: 10, label: 'BMI', data: oustputBmiData, }, { label: '体重', fill: true, lineTension: 0.1, backgroundColor: 'rgba(244,194,137,0.4)', borderColor: 'rgba(244,194,137,1)', borderCapStyle: 'round', borderDash: [], borderDashOffset: 0.0, borderJoinStyle: 'square', pointBorderColor: 'rgba(244,194,137,1)', pointBackgroundColor: '#eee', pointBorderWidth: 10, pointHoverRadius: 5, pointHoverBackgroundColor: 'rgba(244,194,137,1)', pointHoverBorderColor: 'rgba(220,220,220,1)', pointHoverBorderWidth: 1, pointRadius: 1, pointHitRadius: 10, data: oustputWeightData } ] }; return ( <div> <h2>BMI・体重推移</h2> <Line data={data} /> </div> ); } export default BmiLine;
作成した画面イメージ
下記のデータをもとにグラフを表示する
グラフ出力結果