javascript - ReactJS/D3 - 在使用 D3 的不同组件上使用 .selectAll
问题描述
我需要从d3
另一个组件的代码中获取一些元素,但我不确定如何执行此操作。
我不确定我是否正确地处理了这个问题,但这就是我到目前为止所拥有的。
在我的helpers.tsx
我有这个
const createStack = (
chart: d3.Selection<SVGGElement, unknown, null, undefined>,
dataset: Dataset[],
stackSeries: d3.Series<
{
[key: string]: number
},
string
>[],
area: d3.Area<[number, number]>,
line: any
) => {
let stack = chart.append('g').attr('class', 'stack')
let colorMap = new Map()
dataset.forEach((set) => {
colorMap.set(set.id, set.color)
})
stack
.selectAll('path')
.data(stackSeries)
.enter()
.append('path')
.attr('class', css.stack)
.attr('fill', (d: any) => {
return colorMap.get(d.key) + '30'
})
.attr('d', (d: any) => area(d))
chart
.append('g')
.selectAll('path')
.data(stackSeries)
.enter()
.append('path')
.attr('class', css.line)
.attr('stroke', (d: any) => {
return colorMap.get(d.key)
})
.attr('fill', 'none')
.attr('d', (d: any) => line(d))
.on('mouseover', function (d: any, i) {
d3.select(this).style('stroke-width', '10px')
something()
console.log(d.srcElement.__data__.key)
})
.on('mouseout', function (d: any, i) {
d3.select(this).style('stroke-width', '1px')
})
}
我想.selectAll
在另一个组件上使用,这样我就可以在那里做这部分
.on('mouseover', function (d: any, i) {
d3.select(this).style('stroke-width', '10px')
something()
console.log(d.srcElement.__data__.key)
})
.on('mouseout', function (d: any, i) {
d3.select(this).style('stroke-width', '1px')
})
这可能吗?我已经尝试过了,但我似乎根本无法获得任何元素(可能是因为我试图在元素存在之前检索它们?)
解决方案
推荐阅读
- react-hooks - 验证后 React Hook useCallback()?
- javascript - 关闭浏览器的查找 (CTRL + F)
- c# - 对 RAPID API 的 API 请求给出 StatusCode:401,ReasonPhrase:'Unauthorized'
- linux - 限制 Ubuntu 上的容器资源
- javascript - React - 登录提交按钮以呈现新页面
- python - 激活没有变量分配的pytorch网络节点?
- python - 奇数类型值我无法转换为浮点数
- visual-studio-code - 如何在VS Code中将markdown按钮从单元格的顶部移动到底部?
- android - GooglePlay - 封闭/内部测试:如何删除/禁用测试人员设备上的应用程序?
- reactjs - 警告:组件正在将未定义类型的受控输入更改为不受控