Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs React Uncaught TypeError:_this2.setState不是函数_Reactjs - Fatal编程技术网

Reactjs React Uncaught TypeError:_this2.setState不是函数

Reactjs React Uncaught TypeError:_this2.setState不是函数,reactjs,Reactjs,我已经在stackoverflow上检查了这个错误,我得到的唯一结果是函数需要与这个绑定。 但我已经在代码中这样做了,错误仍然存在。 我不明白为什么会这样。 完整代码打开,下面有一个短路副本 class MainComponent extends React.Component{ constructor(props) { super(props); this.setOperand = this.setOperand.bind(this); this.calculate

我已经在stackoverflow上检查了这个错误,我得到的唯一结果是函数需要与这个绑定。 但我已经在代码中这样做了,错误仍然存在。 我不明白为什么会这样。 完整代码打开,下面有一个短路副本

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"));
class MainComponent扩展了React.Component{
建造师(道具){
超级(道具);
this.setOperand=this.setOperand.bind(this);
this.calculate=this.calculate.bind(this);
this.updateValue=this.updateValue.bind(this);
此.state={
当前值:0,
第二个值:0,
操作数:空,
isNewNum:false
};
}
SetOperator=(值)=>{
//从输入设置数据
};
计算=()=>{
//数学知识
this.setState=({
currentValue:结果,
isNewNum:false
});
};
updateValue=(值)=>{
如果(!this.state.isNewNum){//第一个数字
var newNum=“”;
//设定值
这是我的国家({
当前值:newNum
});
}否则{
var newNum2=“”;
//设定值
这是我的国家({
第二个值:newNum2
});
}
};
render(){
返回(
isNewNum={`${this.state.isNewNum}`}

{this.state.isNewNum?:} ... ) }; } render(,document.getElementById(“根”));
您不需要在构造函数中重新绑定回调,因为arrow函数继承封闭类(在本例中为组件)的上下文

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

这就是错误:

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

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

不幸的是,事实并非如此。我重新绑定了它们,因为我认为这样可以解决问题,但绑定或取消绑定都不起作用。有人知道为什么会这样吗?我只是想练习和学习,这就是重点。Prototype chain找到一个ownProperty
setState
,它不再是一个函数,所以换句话说,我意外地分配了setState,这就是问题的原因。所有对它的调用都不再有效,因为它不再是一个函数。非常感谢你!对于继承自
react.Component
的类的属性描述符,可能需要在react代码中将其配置为
writable:false
——但这对调试setState问题等并希望重载它的人来说是不好的。@Kinduser我在我的代码笔上对其进行了注释,以及更新的代码。