未捕获的TypeError:无法读取Component.setState上未定义的属性'enqueueSetState'

时间:2018-10-03 18:30:18

标签: javascript reactjs

Counter组件与0一起使用。 this 到处都没有,所以抓住了错误吗?

class Counter extends React.Component {

    constructor(props) {

        super(props)

        this.state = {
            count: 0
        }

        setInterval(this.setState, 1000, {
            count: this.state.count + 1
        })
    }

    render() {
        return <p>{this.state.count}</p>
    }
}

1 个答案:

答案 0 :(得分:1)

您的setInterval(和setState)语法应如下所示:

setInterval(() => {
  this.setState(state => ({
    count: state.count + 1
  }));
}, 1000)
  • setInterval需要一个功能和一个延迟(根据您的情况)。
  • setState可以采用对象或函数,在您的情况下 最好使用函数版本,因为下一个状态取决于 当前状态。由于setState是异步的,因此如果 您将使用对象版本。

运行示例:

class Counter extends React.Component {

  constructor(props) {

    super(props)

    this.state = {
      count: 0
    }

    setInterval(() => {
      this.setState(state => ({
        count: state.count + 1
      }));
    }, 1000)
  }

  render() {
    return <p > {
      this.state.count
    } < /p>
  }
}

ReactDOM.render(<Counter/>, document.getElementById('root'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="root" />