我如何在反应中取消setTimeout时间

时间:2019-08-01 08:28:37

标签: javascript reactjs settimeout

我创建了一个应用程序,其中当按下按钮时,时钟时间开始。如果在23秒(23000)设置为0之后什么也不做,并且状态(this.state.user)更改了。这是正确的。

如果再次单击该元素,则需要将23秒(23000)归零并清除超时。因为如果超时还剩一些时间,该项目将自动关闭。

我尝试了“ clearTimeout(this.change); clearInterval(this.change); “但是它不起作用,我这次不知道如何取消。

class Header extends Component {
    constructor(props) {
        super(props);

        this.change = null;

        this.state = {
            usuario: true,
            timeElapsed: 0,
            adminOrWrap: true,
        };

        ["descansoAdminWrap", "otrosDescansos",].forEach((method) => {
            this[method] = this[method].bind(this);
        });
    }

   componentDidUpdate(prevProps, prevState) {
        if (prevProps.notInCall === false && this.props.notInCall && this.state.usuario === true) {
            this.descansoAdminWrap(prevProps, prevState);
       }
   }

    descansoAdminWrap(prevProps){
        var usuarioAdminOrWrapFalse=  this.state.usuario && this.props.adminOrWrap === false;
        var notInCallFalseUsuario= this.props.notInCall === false && this.state.usuario
        //mostrar y ocultar el descanso de 'tiempo administrativo' y 'wrap time'
        if(this.state.usuario && this.props.notInCall){
            this.setState({
                usuario: false,
                timeElapsed: 0,
            });
            clearTimeout(this.change);
            clearInterval(this.change);
            if(prevProps.notInCall === false){
                this.handleAdminOrWrap(false)
                this.setState({
                    usuario: false,
                    timeElapsed: 0,
                });
                this.change = setTimeout(() => {
                    this.setState({
                        usuario: true,
                        notInCall: true,
                    });
                    this.handleAdminOrWrap(true)
                }, 23000)
            }
        }
    }

1 个答案:

答案 0 :(得分:1)

clearTimeout用于setTimeoutclearInterval用于setInterval

因此在这里使用clearInterval不会有帮助。

如果您希望这么做,我会检查您是否真的在clearTimeout条件内用console.log来呼叫if。尤其是在您第一次将state.usuario的值修改为false时,这将阻止您再次清除条件。