【问题标题】:where call setInterval in react在哪里调用 setInterval 反应
【发布时间】:2021-11-05 19:25:20
【问题描述】:

我是新来的反应。我想使用 setState 和 setInterval 创建一个计数器。 我不想将 react.dom 渲染放在一个间隔中,因为我知道这不是一个好习惯。 这是我迄今为止的努力:

class Counter extends React.Component {
  state = {
    counter: 0
  }
  increment = () => {
    setInterval(() => {
      this.setState({
        counter: this.state.counter+1});
    }, 1000);
   
  };
  
  render() {
    return <div>
    <p>{this.state.counter}</p>
    </div>;
  }
}


const el = <Counter />; 
ReactDOM.render(
  el, document.getElementById('root')
);

我也试过这样:

class Counter extends React.Component {
  state = {
    counter: 0
  }
  increment = () => {
    this.setState({
     counter: this.state.counter+1});
  };
  
  render() {
    return <div>
    <p>{this.state.counter}</p>
    </div>;
  }
}

setInterval(Counter.increment, 100)

const el = <Counter />; 
ReactDOM.render(
  el, document.getElementById('root')
);

他们都没有工作。 有什么问题?

【问题讨论】:

标签: reactjs


【解决方案1】:

您没有调用increment 函数。您必须在 componentDidMount() 中调用它。

class Counter extends React.Component {
  state = {
    counter: 0
  }
  increment = () => {
    setInterval(() => {
      this.setState({
        counter: this.state.counter+1});
    }, 1000);
   
  };
  
  componentDidMount(){
    this.increment();
  }
  
  render() {
    return <div>
    <p>{this.state.counter}</p>
    </div>;
  }
}

ReactDOM.render(<Counter/>, document.getElementById("root"))
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

<div id="root"></div>

【讨论】:

  • @nfn 请检查这个答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-19
  • 2019-05-01
  • 1970-01-01
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
  • 2021-06-02
相关资源
最近更新 更多