【发布时间】:2020-08-31 18:21:20
【问题描述】:
我正在处理 D3 React 要求,如果用户单击 svgm 上的矩形,则会为文本提供输入框。我想使用该输入来更新反应应用程序中的另一个组件。我如何使用 svg 中的异物来做到这一点。有没有其他方法可以将文本框与 React 中 d3 中的矩形(绘制在每个矩形上方)链接起来。
我现有的代码sn-p在这里
d3.select('svg#target')
.append("g")
.selectAll("whatever")
.data([1,2,3,4])
.enter()
.append("rect")
.attr("x", function(d, i) {
var x = 200 * Math.sin(-60 * i * (Math.PI / 180));
return x - 50;
})
.attr("y", function(d, i) {
var y = 200 * Math.cos(-60 * i * (Math.PI / 180));
return y - 20;
})
.attr("width", 100)
.attr("height", 40)
.attr("fill", "gray")
.on("click", function(d, i) {
const count = i;
d3.select(this)
.append("foreignObject")
.attr("x", function() {
return 300 * Math.sin(-60 * i * (Math.PI / 180)) + 50;
})
.attr("y", function() {
return 280 * Math.cos(-60 * i * (Math.PI / 180));
})
.attr("width", 140)
.attr("height", 20)
.html(function(d, i) {
return (
'<input type="text" id="attribute' +
count +
'value="Text goes here" />'
);
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
<svg viewbox="-250 -250 500 500" width="400" id="target"></svg>
【问题讨论】:
-
尽量把问题作为一个最小的可重复的例子。 (stackoverflow.com/help/minimal-reproducible-example) 我编辑了你的答案来尝试这样做。
标签: javascript reactjs d3.js svg