React Uncaught TypeError:this.setState不是函数

时间:2017-04-15 11:31:53

标签: reactjs babeljs ecmascript-next

我正在使用属性初始值设定项。这是我的状态。

 state = {
 status: 'Simon Says!',
 compArr: [],
 color: 'red',
 userArr: []
};

这是我的pen

我在这里打电话给国家

game = (event) => {
 let compArr = this.state.compArr;
 for (let i = 0; i < compArr.length; i++) {
  (function(i) {
    setTimeout(function() {
      switch (compArr[i]) {
        case 1:
          this.setState({
            color: 'green'
          });
          break;
        case 2:
          this.setState({
            color: 'red'
          });
          break;
        case 3:
          this.setState({
            color: 'yellow'
          });
          break;
        case 4:
          this.setState({
            color: 'blue'
          });
          break;
      }
    }, 1000 * i);
  }(i))
}
};

我收到以下错误

  

未捕获的TypeError:this.setState不是函数

如何在ES2015 +中修复此问题?

1 个答案:

答案 0 :(得分:0)

问题是,这并没有引用setTimeout函数中的正确上下文,你可以按照以下方式进行操作

game = (event) => {
 var self = this;
 let compArr = this.state.compArr;
 for (let i = 0; i < compArr.length; i++) {
  (function(i) {
    setTimeout(function() {
      switch (compArr[i]) {
        case 1:
          self.setState({
            color: 'green'
          });
          break;
        case 2:
          self.setState({
            color: 'red'
          });
          break;
        case 3:
          self.setState({
            color: 'yellow'
          });
          break;
        case 4:
          self.setState({
            color: 'blue'
          });
          break;
      }
    }, 1000 * i);
  }(i))
}
};

<强> CODEPEN

您可以使用数组

简单地理解您的逻辑
game = (event) => {
 var self = this;
 let compArr = this.state.compArr;
 var color = ["green", "red", "yellow", "blue"];
 for (let i = 0; i < compArr.length; i++) {
  (function(i) {
    setTimeout(function() {
      self.setState({color: color[compArr[i] - 1]});
    }, 1000 * i);
  }(i))
}
};