React Uncaught TypeError:_this2.setState不是函数

时间:2017-07-29 23:18:55

标签: reactjs

我已经在stackoverflow上检查了这个错误,我得到的唯一结果就是这些功能需要绑定。 但我已经在我的代码中这样做了,错误仍然存​​在。 我无法弄清楚为什么会这样。 CodePen上的完整代码和

下面的简短副本
class MainComponent extends React.Component{
  constructor(props) {
    super(props);
    this.setOperand = this.setOperand.bind(this);
    this.calculate = this.calculate.bind(this);
    this.updateValue = this.updateValue.bind(this);
    this.state = {
      currentValue: 0,
      secondValue: 0,
      operand: null,
      isNewNum: false
    };
  }

  setOperand = (value) => {
    //set data from input
  };

  calculate = () => {
    //math stuff
    this.setState = ({
      currentValue: result,
      isNewNum: false
    });
  };

  updateValue = (value) => {
    if(!this.state.isNewNum){ //first Number
      var newNum = "";
      //set values
      this.setState({
        currentValue: newNum
      });
    } else {
      var newNum2 = "";
      //set values
      this.setState({
        secondValue: newNum2
      });
    }
  };

  render(){
    return(
      <div id="main">
        <p>isNewNum = {`${this.state.isNewNum}`}</p>

        {this.state.isNewNum ?  <Display display ={this.state.secondValue}/> : <Display display ={this.state.currentValue}/>}
        <div>
          <Buttons value={1} onClick={this.updateValue}/>
          ...
          <Buttons value={'+'} onClick={this.setOperand}/>
        </div>
      </div>
    )
  };
}


ReactDOM.render(<MainComponent />, document.getElementById("root"));

2 个答案:

答案 0 :(得分:2)

ER。

实际上,您在calculate方法中创建了实例的setState属性的本地副本,在开始在本地解析时将原型链切换为React.Component

这是错误:

this.setState = ({
  currentValue: result,
  isNewNum: false
});

extra =是一项任务。任何后续调用setState都会失败

答案 1 :(得分:0)

您不需要在构造函数中重新绑定回调,因为箭头函数会继承封闭类的上下文(在本例中为组件)。