javascript - React 中 Blinker 速度不一致

标签 javascript reactjs ecmascript-6 blinker

我正在尝试在 React 中创建一个信号灯,但是,信号灯本身以不一致的速率闪烁/渲染,并且表现得有些令人沮丧。请参阅随附的片段。我在组件安装时做错了什么吗?谢谢!

class Blinker extends React.Component {
  constructor(props) {
    super();
    this.state = {
      appear: true
    }
    this.blinker = this.blinker.bind(this);
  }

  blinker()  {
    this.setState({appear: !this.state.appear });
  }

  componentDidMount() {
    setInterval(this.blinker, 1000)
  }

  componentDidUpdate() {
    setTimeout(this.blinker, 1000)
  }

  render() {
    return (
      <div>
        { (this.state.appear) && "xxx" }
      </div>
    );
  }
}

ReactDOM.render(
  <Blinker />,
  app
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<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="app"></div>

最佳答案

删除componentDidUpdate。为什么在组件更新后会触发新的一秒超时? didMount 的间隔仍将运行。

此外,您需要清除组件卸载时的间隔:

componentDidMount() {
  this.blinkerId = setInterval(this.blinker, 1000)
}

componentWillUnmount() {
  clearInterval(this.blinkerId);
}

关于javascript - React 中 Blinker 速度不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46626867/

相关文章:

javascript - 列表的动态构建

javascript - JavaScript 中的 "Usual"函数与函数变量

reactjs - 服务器重定向不适用于 ReactJS 代理服务器

javascript - 功能组件渲染一次,类组件渲染两次

javascript - JS - 创建新 worker 导致 404

javascript - 来自简码的 wp_localize_script 多次

reactjs - 使用 Monaco 编辑器无法在详细信息列表中导航

javascript - 错误: Could not locate the bindings file.尝试:(Webpack)

javascript - `export { foo as default }` 是有效的 ES2015 吗?

javascript - ruby rails : how to pass JSON to JavaScript