新的D3和React。
我试图显示数据的网格(x/y轴)为每个记录对背景图像(标志),显示一个小图像。如果我使用静态数据(在下面的示例代码中是gcs),我就可以使用D3图。但是,如果我尝试从CohortContext中过滤/Map数据,则元素不会显示在图中。我认为这是一个时间问题,D3在.map返回数据之前渲染,但我可能错了。我试着将useEffect Package 在一个BRAC中,但是我现在抓住了救命稻草,它无论如何都没有解决这个问题,因为所有的代码都在BRAC中。
代码:
import React, { useEffect, useContext } from "react"
import * as d3 from "d3"
import logo from '../../assets/images//charts/360Chart.svg'
import CohortContext from "../../utility/context/cohort/cohort-context"
import Saboteur from '../../assets/images/charts/chartBubbleKey.svg'
function ChartData({ goal }) {
const gcs = [
{
chartAsset: Saboteur,
xCoordinates: 200,
yCoordinates: 300
},
{
chartAsset: Saboteur,
xCoordinates: 150,
yCoordinates: 150
}
]
console.log(gcs)
const width = 800
const height = 800
const { cohorts } = useContext(CohortContext)
useEffect(() => {
//Retrieve the Goal data from the useContext
const fetchData = async () => {
const goalCohorts = cohorts
.filter(records => records.goalId === goal.goalId)
.map((records) => {
return {
chartAsset: Saboteur,
xCoordinates: records.xcoordinates,
yCoordinates: records.ycoordinates
}
})
console.log('goal cohorts for Chart :', goalCohorts)
const svg = d3
.select("#svgcontainer")
.append("svg")
.attr("width", width)
.attr("height", height)
//background Chart
svg
.append("svg:image")
.attr("xlink:href", () => logo)
.attr("width", 580)
.attr("height", 580)
.attr("x", 110)
.attr("y", 20)
// Add in the data for the chart data
const g = svg
.selectAll("g")
.append("g")
.data(goalCohorts) // works if I use .data(gcs)
.enter()
g.append("svg:image")
.attr("xlink:href", (data) => data.chartAsset)
.attr("width", 50)
.attr("height", 50)
.attr("x", (data) => data.xCoordinates)
.attr("y", (data) => data.yCoordinates)
}
fetchData()
}, [])
return (
< div className="App" >
<div id="svgcontainer"></div>
</div >
)
}
export default ChartData
如果我查看console.logs,数据是相同的--因此假设有一个时间问题。有人能看出为什么数据(目标队列)没有显示数据吗?
我使用React v18.1,D3 v7.8
1条答案
按热度按时间czfnxgou1#
,[cohorts]);
请将[队列]替换为[]。