当你点击一个按钮时,我试图移动D3中的元素。这段代码复制了元素而不是移动它们。
import React, { useRef, useEffect, useState } from "react";
import { select } from "d3";
const svgSize = 500;
const initData = [
{ value: 3, x: 60, y: 60 },
{ value: 2, x: 40, y: 40 },
{ value: 1, x: 20, y: 20 },
];
export default function Home() {
const [data, setData] = useState(initData);
const svgRef = useRef();
const animate = () => {
setData(
data.map((item) => {
return {
value: item.value,
x: item.x + 20,
y: item.y + 20,
};
})
);
};
useEffect(() => {
const svg = select(svgRef.current);
svg
.selectAll("circle")
.data(data)
.join("text")
.text((value) => value.value)
.attr("x", (value) => value.x)
.attr("y", (value) => value.y);
}, [data]);
return (
<div>
<button onClick={animate}>Animate</button>
<div>
<svg width={svgSize} height={svgSize} ref={svgRef} />
</div>
</div>
);
}
页面加载:
单击按钮后:
1条答案
按热度按时间deyfvvtc1#
我认为您在
svg
选择节点时遇到了问题,您正在尝试selectAll('circle')
,但您需要选择selectAll('text')
。因此,您绘制了一个新的text
节点,而不是移动它们。请尝试将您的useEffect
更改为:如果要将动画添加到移动中,请添加: