前提・実現したいこと
React(TypeScript)とApexchartsを使用してボタンをクリックするとデータを1つずつ追加しチャートを更新していくアプリを開発中です。
下記のソースコードのように実装すると目標のものはできましたが、新しくnewSeries
を作成してset
している部分に引っ掛かりを感じています。
実現したいこと
series
のdata
の配列だけを更新することはできないでしょうか?
該当のソースコード
typescript
1import Chart from 'react-apexcharts'; 2import { useState } from 'react'; 3 4export default function MyChart() { 5 const [options, setOptions] = useState({}); 6 const [series, setSeries] = useState([ 7 { 8 name: 'hogehoge', 9 data: [14.4, 3.5, 15.0, 4.2, 16.8, 18.1, 8.3], // ★直接ここだけを変更したい 10 }, 11 ]); 12 13 const add = () => { 14 var arr = series[0].data.slice(); 15 arr.push(Math.floor(Math.random() * 10) + 3); 16 17 // 現在は新しくstateを作成しなおしてsetしています 18 var newSeries = [{ 19 name: 'hogehoge', 20 data: arr, 21 }]; 22 23 setSeries(newSeries); 24 } 25 26 return ( 27 <> 28 <Chart options={options} series={series} type='line' /> 29 <style>{` 30 .chart { 31 width: 500px; 32 margin: auto; 33 }`} 34 </style> 35 <button onClick={add}>ランダム追加</button> 36 </> 37 ); 38}
試したこと
下記のようにコードを書き換えました。
series
のdataは更新されますが、チャートは更新されませんでした。
typescript
1 2export default function MyChart() { 3 const [seriesData, setSeriesData] = useState([14.4, 3.5, 15.0, 4.2, 16.8, 18.1, 8.3]); 4 const [series, setSeries] = useState([ 5 { 6 name: 'hogehoge', 7 data: seriesData, 8 }, 9 ]); 10 11 const add = () => { 12 var arr = seriesData.slice(); 13 arr.push(Math.floor(Math.random() * 10) + 3); 14 15 setSeriesData(arr); 16 } 17}
補足情報(FW/ツールのバージョンなど)
React: v.17.0.1
Typescript: v.4.0.3
apexcharts: v.3.23.1
回答1件
あなたの回答
tips
プレビュー