前提・実現したいこと
ReactにチャートライブラリamChartsの導入をしています。その上で、テキストtypeのinputタグに配列のアルファベット(配列データのcategoryに当たる部分)を入力し、ボタンtypeのinputタグをクリックした時に配列データを追加できるようにしたいのですが、なぜか追加されません。(クリックイベントはaddData)
原因は何でしょうか、
ご回答よろしくお願いします。
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
ソースコード import React, { useLayoutEffect, useRef } from "react"; import { useState } from "react"; import * as am4charts from "@amcharts/amcharts4/charts"; import * as am4core from "@amcharts/amcharts4/core"; import am4themes_animated from "@amcharts/amcharts4/themes/animated"; am4core.useTheme(am4themes_animated); function GanttChart () { const divRef = useRef(am4charts.XYChart); const chartRef = useRef(HTMLDivElement); const chartData = [ { category: "A", id:"1", start: 1609462800000, // 2021-01-01 10:00:00 end: 1609466400000 // 2021-01-01 11:00:00 }, { category: "B", id:"2", start: 1609473600000, // 2021-01-01 13:00:00 end: 1609491600000 // 2021-01-01 14:00:00 }, { category: "C", id:"3", start: 1609473600000, // 2021-01-01 13:00:00 end: 1609491600000 // 2021-01-01 14:00:00 } ]; const [data, changeData] = useState(chartData); const addData = () => { let value = document.getElementById("text").value; if(value === "") return; let next = data.length + 1; changeData(todos => [...todos, { id: next ,category: value}]); console.log(next); console.log(value); console.log(chartData); }; useLayoutEffect(() => { if (divRef.current) { const chart = am4core.create(divRef.current, am4charts.XYChart); chart.height = 500; chart.paddingTop = 0; chart.paddingBottom = 0; chart.dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"; chart.data = chartData; const dateAxis = chart.xAxes.push(new am4charts.DateAxis()); dateAxis.extraMin = 0.1; dateAxis.extraMax = 0.1; dateAxis.renderer.labels.template.location = 0.0001; const categoryAxis = chart.yAxes.push(new am4charts.CategoryAxis()); categoryAxis.dataFields.category = "category"; categoryAxis.renderer.grid.template.location = 0; categoryAxis.renderer.inversed = true; const series = chart.series.push(new am4charts.ColumnSeries()); series.dataFields.openDateX = "start"; series.dataFields.dateX = "end"; series.dataFields.categoryY = "category"; series.columns.template.tooltipText = "category: {category} \n 開始: {openDateX} \n 終了: {dateX}"; series.columns.template.tooltipPosition = "pointer"; const scrollbar = new am4charts.XYChartScrollbar(); chart.scrollbarX = scrollbar; scrollbar.series.push(series); chart.cursor = new am4charts.XYCursor(); chart.scrollbarX = new am4core.Scrollbar(); chart.scrollbarY = new am4core.Scrollbar(); chart.plotContainer.events.on("doublehit", () => dateAxis.zoom({ start: 0, end: 1 }) ); chartRef.current = chart; return () => chart.dispose(); } }, [chartData]); // useLayoutEffect(() => { // }, [props.paddingRight]); return ( <div> <div ref={divRef} style={{ height: 500, width: "85%"}} > </div> <input type="text" id="text"></input> <input type="button" onClick={addData}></input> </div> ) }; export default GanttChart
試したこと
addDataの中の”changeData(todos => [...todos, { id: next ,category: value}]);”を”changeData(data.concat({ id: next ,category: value}));”に変えて試したりもしましたが同じ結果になりました。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー