Javascript ReactJS/D3-使用。在使用D3的不同组件上选择All

Javascript ReactJS/D3-使用。在使用D3的不同组件上选择All,javascript,reactjs,d3.js,Javascript,Reactjs,D3.js,我需要从另一个组件上的d3代码中获取一些元素,我不知道如何做到这一点 我不确定我是否正确地处理了这个问题,但这是我到目前为止得到的 在我的helpers.tsx上,我有这个 const createStack = ( chart: d3.Selection<SVGGElement, unknown, null, undefined>, dataset: Dataset[], stackSeries: d3.Series< { [key: stri

我需要从另一个组件上的
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')
    })
}

这可能吗?我试过了,但似乎根本找不到任何元素(可能是因为我试图在元素存在之前检索它们?

如果您认为这是一个生命周期问题,请为我们重现生命周期。我们不能这样评估。将您的代码缩减为a,这将帮助我们理解它可能您可以使用
    .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')
    })