0

父.js

const Parent = () => {
  const data= {
    labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'],
    datasets: [
        {
            label: 'Sales',
            data: [54545, 34555, 33221, 12345, 29064, 31999],
            backgroundColor: 'transparent',
        },
        {
            label: 'Spend',
            data: [3444, 1233, 890, 42321, 678, 890],
            backgroundColor: 'transparent',
        },
        {
            label: 'Orders',
            data: [3444, 1233, 890, 42321, 678, 890],
            backgroundColor: 'transparent',
        },
        {
            label: 'Total',
            data: [3444, 1233, 890, 42321, 678, 890],
            backgroundColor: 'transparent',
        },
     ],
   }

   return(
     <Child data={data} />
   )
}

export default Parent

Child.js

const Child = (props) => {
    const [chartDataOriginal] = useState({ ...props.data })
    const [chartData, setChartData] = useState({ ...props.data })

    useEffect(() => {
        // calculate chartData based on chartDataOriginal, filter only two dataset items at a time from original chart data, 
        // change yAxisID, borderColor etc
        setChartData(calculatedData)
    }, [someState])
    
    const onChangeChartData = () => {
       // change `someState` state variable to trigger side effect
    }
    return(
      <>
       <Line data={chartData} options={options} />
       <Button onClick={onChangeChartData}>Test</Button>
      </>
    )
}
export default Child

动画在初始绘制期间工作正常,但一旦画布被渲染(线条),单击按钮时动画不再起作用。除了动画,一切看起来都很好。但是,如果我将数据从父组件移动到子组件并使用它而不是道具,那么动画效果很好。像下面的东西。

Child.js

const Child = (props) => {
    const chartDataOriginal =  {
           labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'],
           datasets: [
            {
                label: 'Sales',
                data: [54545, 34555, 33221, 12345, 29064, 31999],
                backgroundColor: 'transparent',
            },
            {
                label: 'Spend',
                data: [3444, 1233, 890, 42321, 678, 890],
                backgroundColor: 'transparent',
            },
            {
                label: 'Orders',
                data: [3444, 1233, 890, 42321, 678, 890],
                backgroundColor: 'transparent',
            },
            {
                label: 'Total',
                data: [3444, 1233, 890, 42321, 678, 890],
                backgroundColor: 'transparent',
           },
         ],
   }
    const [chartData, setChartData] = useState(chartDataOriginal)

    useEffect(() => {
        // calculate chartData based on chartDataOriginal, filter only two dataset items at a time from original chart data, 
        // change yAxisID, borderColor etc
        setChartData(calculatedData)
    }, [someState])
    
    const onChangeChartData = () => {
       // change `someState` state variable to trigger side effect
    }
    return(
      <>
       <Line data={chartData} options={options} />
       <Button onClick={onChangeChartData}>Test</Button>
      </>
    )
}
export default Child

我相信我失踪或不太了解,因此将不胜感激。谢谢!

4

0 回答 0