我正在尝试将正确的类型添加到我的 d3.select 语句中,以便设置 mySVG 变量。
function App() {
const [mySVG, setMySVG] = useState<d3.Selection<d3.BaseType, unknown, HTMLElement, any>>()
const svgRef = useRef<SVGSVGElement | null>(null)
useEffect(() => {
setMySVG(d3.select(svgRef.current));
}, [])
return (
<svg ref= {svgRef}>
</svg>
);
}
目前,我在代码中得到了下面的错误突出显示:
setMySVG(d3.select(svgRef.current));
选择指定的节点元素。
第一个通用“GElement”指的是要选择的元素的类型。第二个通用“OldDatum”是指所选元素上的基准类型。当重新选择具有先前设置的已知基准类型的元素时,这非常有用。
@param node — 要选择的元素
“Selection
”类型的参数不可分配给“SetStateAction ”类型的参数 |未定义>'。 类型“Selection ”不可分配给类型“Selection ”。
“select(...).select(...).select(...).data”的类型在这些类型之间不兼容。 类型 '{ (): 未定义[]; (数据:NewDatum[] | 可迭代,键?:d3.ValueFn
| 未定义):d3.Selection<...>; |未定义):d3.Selection<...>;
我已经通过将类型替换为 any 来使其工作,但我希望能够分配正确的关联类型。
要使用 D3 选择 SVG 元素并为“mySVG”分配正确的 TypeScript 类型,您可以对代码进行以下修改:
import { Selection, BaseType } from 'd3';
function App() {
const [mySVG, setMySVG] = useState<Selection<SVGSVGElement | null, unknown, HTMLElement, any> | null>(null);
const svgRef = useRef<SVGSVGElement | null>(null);
useEffect(() => {
if (svgRef.current) {
setMySVG(d3.select<SVGSVGElement, unknown>(svgRef.current));
}
}, []);
return (
<svg ref={svgRef}>
{/* Your SVG content here */}
</svg>
);
}