ReactJS D3图表不显示从ContextMap的数据,但可以使用静态变量

blmhpbnm  于 2023-10-19  发布在  React
关注(0)|答案(1)|浏览(84)

新的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

czfnxgou

czfnxgou1#

useEffect(() => {
        //Retrieve the Goal data from the useContext
        const fetchData = async () => {
            const goalCohorts = cohorts
        .....

,[cohorts]);
请将[队列]替换为[]。

相关问题