javascript - 有什么方法可以更改折线图(Recharts)中单击的线条的颜色?

标签 javascript reactjs recharts

我的折线图代码有问题。所以,我只想点击某条线来改变它的颜色,但图表中的所有线都会改变它们的笔触颜色。这是我的代码:

    export default class LineChartPresentational extends React.Component {
    constructor(props) {
    super();
    this.state = {
    isclicked: true, }}

    changeStrokeclick() {
    this.setState({isclicked: !this.state.isclicked} )}

    render() {
       let strokecolor = this.state.isclicked ? "#9da0a5" : "#2d75ed" 
    return ( 
       <div>
         <div id="lclastdataref" style={{ textAlign: 'right' }}>
         <span>Last Data Refresh: {linechartdf.date} </span>
      </div>
      <div className='line-charts'>
      <div className="line-chart-wrapper " style={{ width: window.innerWidth / 2, height: window.innerHeight / 2, }}>

        <ResponsiveContainer>
          <LineChart
            width={width} height={height} margin={{ top: 20, right: 20, bottom: 20, left: 20 }} data={linechartdata} id="Line-Chart">
            <XAxis dataKey={xAxisColumn} />
            <YAxis domain={['auto', 'auto']} />
            <Tooltip cursor={false} />
            {
              linechartdata.map((entry, index) => (
                <Line stroke={strokecolor} onClick={this.changeStrokeclick.bind(this)} name={linechartdata[index].dataKey} strokeWidth={lineThickness} dataKey={`value${index + 1}`} dot={false} className={`value${index + 1}`}/>
              ))
            }
            </LineChart>
        </ResponsiveContainer>
      </div>
    </div>
  </div>
); }

拜托,我真的需要你的帮助,因为你可以看到我的台词是使用循环创建的。谢谢!

最佳答案

首先,您需要将isclicked 更改为clickedLineID 并使其接受类似这样的字符串

  constructor(props) {
    super();
    this.state = {
    clickedLineID: '', }}

需要通过onClick传递线路ID

  <Tooltip cursor={false} />
            {
              linechartdata.map((entry, index) => (
                <Line stroke={strokecolor} onClick={this.changeStrokeclick.bind(this, index)} name={linechartdata[index].dataKey} strokeWidth={lineThickness} dataKey={`value${index + 1}`} dot={false} className={`value${index + 1}`}/>
              ))
            }
            </LineChart>

然后处理来自点击行的数据

  changeStrokeclick(data) {
    console.log(data, 'see what is coming');
    this.setState({clickedLineID: data} )
   }

所以当前点击的行是clickedLineID状态

我们不再需要这段代码,我也不喜欢把它放在 render()

let strokecolor = this.state.isclicked ? "#9da0a5" : "#2d75ed" 

将工具提示中的描边线更改为

stroke={index === this.state.clickedLineID ? "#9da0a5" : "#2d75ed"} 

最后的代码是这样的

    <Tooltip cursor={false} />
                {
                  linechartdata.map((entry, index) => (
                    <Line stroke={index === this.state.clickedLineID ? "#9da0a5" : "#2d75ed"}
 onClick={this.changeStrokeclick.bind(this, index)} name={linechartdata[index].dataKey} strokeWidth={lineThickness} dataKey={`value${index + 1}`} dot={false} className={`value${index + 1}`}/>
                  ))
                }
                </LineChart>

更新:

如果再次单击以删除颜色,只需将 changeColor 更改为

  changeColor = (data) =>{
    console.log(data, 'check what we received from the button')
    if(this.state.clickedItem === data){
      this.setState({clickedItem: null})
    }else{
      this.setState({ clickedItem: data })
    }
  };

关于javascript - 有什么方法可以更改折线图(Recharts)中单击的线条的颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49172270/

相关文章:

reactjs - 在 React 和 Webpack 项目上从 "babel-preset-es2015"转换到 "babel-preset-env"时出现问题

javascript - 如何在 React 中更新 render() 中的值?

javascript - 如果元素数量超过 X,CSS/html 会在两列中显示列表?

javascript - 将驼峰式字符串转换为带连字符的 Angular 服务

css - 如何向 Material UI Chip 背景添加线性渐变颜色?

javascript - 如何从 ScriptProcessorNode 迁移到 AudioWorkletNode

javascript - Recharts - 带圆 Angular 的反向垂直条形图具有倒置的末端

javascript - 防止 Recharts 刻度线重叠

javascript - 如何复制这种效果? CSS3

javascript - 延期/ promise 会促进违反得墨忒耳法则吗?