javascript - 如何从另一个组件中清除一个组件的间隔函数?

标签 javascript reactjs

父组件

handleSubmitValidateInput: function(e){
    e.preventDefault();
    var data = {phone: this._phone.value, pwd: this._pwd.value}
    $.ajax({
        type: 'POST',
        data:data,
        url: 'http://localhost:3000/login',
        success: function(data){
            ReactDOM.render(<Home UserDetails={data}/>, document.getElementById('content'));
            var idleTime = 0;
            var interval = setInterval(function(){
                      // some code
                });
            }, (1000));
        },
        error: function(error){
            console.log('Error login!!');
        }
    });
},

我想从 Home 组件中清除 interval。我怎样才能做到这一点?请向我解释一下。下面的函数属于 Home 组件。 我想从注销功能中清除间隔。

handleLogout: function(e){
    e.preventDefault();
    console.log('Cleared');
    localStorage.clear();
    ReactDOM.render(<Login />, document.getElementById('content'));
},

最佳答案

尝试使用 window 对象,而不是使用局部变量。

window.interval = setInterval(function(){
  // some code
});

然后你可以从你的注销函数中清除它

handleLogout: function(e){
  e.preventDefault();
  clearTimeout(window.timeout);
  console.log('Cleared');
  localStorage.clear();
  ReactDOM.render(<Login />, document.getElementById('content'));
},

如果您不想使用 window 对象,当然还有其他实现方法。然而,这应该是最短/最简单的方法。


可以找到一个简单的Demo here或在下面的代码片段中。检查控制台的输出。

var Start = React.createClass({
  start: function() {
    console.log("Timeout started")
    window.timeout = setTimeout(function(){
      console.log("Timeout ended")
    }, 2000);
  },
  render: function() {
    return <button onClick={this.start}>Set Timeout</button>;
  }
});

var Stop = React.createClass({
  stop: function() {
    clearTimeout(window.timeout);
    console.log("Timeout cleared");
  },
  render: function() {
    return <button onClick={this.stop}>Clear Timeout</button>;
  }
});

ReactDOM.render(
  <div>
  	<Start />
    <Stop />
  </div>,
  document.getElementById('container')
);
<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="container"></div>

关于javascript - 如何从另一个组件中清除一个组件的间隔函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39830562/

相关文章:

隐式声明的 JavaScript 变量

javascript - 无法在 amcharts v4 中禁用 X 轴标签

javascript - node.js 中的 response.end 连接丢失

javascript - 使用 JavaScript 增加行数?

javascript - Html5 - 删除插入不完整日期时输入日期的镶边错误

javascript - 如何在 fetch API 调用结果中使用 "this"关键字

javascript - React Router 服务器端呈现错误 : Warning: Failed propType: Required prop `history` was not specified in `RoutingContext`

javascript - 倒计时值返回 0

reactjs - React Native webview cookie问题

reactjs - 在react-native中隐藏键盘