javascript - 类型错误 : Cannot read property 'opacity' of null

标签 javascript reactjs jsx recharts

我试图在将鼠标悬停在 React 图表中的图例上时实现不透明度更改: https://jsfiddle.net/alidingling/1p40zzfe/

但是,我总是收到错误:TypeError:无法读取 null 的属性“opacity”。有理由吗?导致问题的原因是具有“OnMouseEnter”和“OnMouseLeave”行的 Legend 组件。

谢谢

class EducationPageRouter extends React.Component{
  getInitialState() {
    return {
        opacity: {
        car: 1,
        phone: 1,
      },
    };
  }

  handleMouseEnter(o) {
    const { dataKey } = o;
    const { opacity } = this.state;

    this.setState({
        opacity: { ...opacity, [dataKey]: 0.5 },
    });
  }

  handleMouseLeave(o) {
    const { dataKey } = o;
    const { opacity } = this.state;

    this.setState({
        opacity: { ...opacity, [dataKey]: 1 },
    });
  }

  render() {
    const { opacity } = this.state;

    return (

      <Card>
        <CardContent>
          <Typography variant="title" color="primary" gutterBottom="true">
            Sales Information Display
          </Typography>
          <Typography variant="header1" color="primary" gutterBottom="true">
            Line Graph - Number of Sales to Date Time
          </Typography>
          <Button variant="raised" color="primary">
            Switch
          </Button>

          <ResponsiveContainer width="95%" aspect={9.5/3.8}>
            <LineChart
              data={formattedSales}
              margin={{ top:5, right:10, bottom:5, left:20 }}
            >
              <XAxis
                dataKey="date"
                padding={{ left:0, right:50 }}
                style={{ fontFamily: "Roboto, sans-serif" }}
                tick={{ fontSize: "12.5px"}}
              />
              <YAxis
                dataKey="car"
              />
              <CartesianGrid
                stroke="#f5f5f5"
                strokeDasharray="2.5 2.5"
              />
              <Tooltip
                wrapperStyle={{ fontFamily: "Roboto, sans-serif" }}
              />

              <Legend
                onMouseEnter={this.handleMouseEnter} 
                onMouseLeave={this.handleMouseLeave}
                wrapperStyle={{ fontFamily: "Roboto, sans-serif" }}
                verticalAlign="bottom"
                height={40}
              />

              <Line
                type="monotone"
                dataKey="car"
                stroke="#4169e1"
              />
              <Line
                type="monotone"
                dataKey="phone"
                stroke="#fa8072"
              />
            </LineChart>
          </ResponsiveContainer>
        </CardContent>
      </Card>
    )
  }
}

最佳答案

getInitialState 只能与 createReactClass 一起使用,因此您的状态将为 null。您可以在构造函数中设置初始状态,或使用类属性。

您的事件处理程序 handleMouseEnterhandleMouseLeave 未绑定(bind),因此 this 不会是您所期望的。解决这个问题的一种方法是将它们绑定(bind)到构造函数中的 this ,或者将它们放入属性初始化的箭头函数中。

class EducationPageRouter extends React.Component {
  state = {
    opacity: {
      car: 1,
      phone: 1,
    }
  };

  handleMouseEnter = o => {
    const { dataKey } = o;
    const { opacity } = this.state;

    this.setState({
      opacity: { ...opacity, [dataKey]: 0.5 }
    });
  };

  handleMouseLeave = o => {
    const { dataKey } = o;
    const { opacity } = this.state;

    this.setState({
      opacity: { ...opacity, [dataKey]: 1 }
    });
  };

  // ...
}

关于javascript - 类型错误 : Cannot read property 'opacity' of null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51571081/

相关文章:

javascript - Angular2 重复标识符 'PropertyKey'

javascript - 从 JavaScript 加载的树中的自定义样式 Kendo Treeview 节点文本

javascript - JSX for...in 循环

javascript - 将 JSX 片段与 HTML 连接起来,然后渲染累积的结果

node.js - 仅在状态更新时执行获取请求

reactjs - React/JSX 中推荐的字符行长度

javascript - "Cannot read property ' Prop ' of undefined"React 问题

javascript - Puppeteer 找不到 Xpath

javascript - React 组件未渲染

reactjs - 类型错误 : No "routes" found in navigation state