javascript - 当 Reactjs 组件中的 componentWillUnmount 时如何清除异步函数?

标签 javascript reactjs asynchronous cleartimeout

这是组件:

class ChartComp extends Component{
    constructor(props){
        super(props);
        this.timer = null;
        this.loadData = this.loadData.bind(this);
    }

    componentWillMount(){
        this.loadData();
    }

    componentWillUnmount(){
        if(this.timer){
            clearTimeout(this.timer);
        }
    }

    loadData(){
        //...
        getJSON(url, msg=>{ //get data from server
            if(msg.success){
                //...
                this.timer = setTimeout(()=>{this.loadData()}, 30000); //get data and rerender the component every 30s
            }
        })
    }

    render(){
        //...
    }
}

clearTimeout 函数将在组件卸载之前被调用。但是计时器处于异步功能中,在我收到服务器响应后它会再次启动。那么我怎样才能让 clearTimeout 工作呢?

最佳答案

componentWillUnmount 中的类中设置一个标志。

在您的异步回调中,检查该标志是否已设置,如果已设置,则立即停止。

关于javascript - 当 Reactjs 组件中的 componentWillUnmount 时如何清除异步函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45063486/

相关文章:

javascript - javascript 如何以如此准确的方式打印 0.1?

javascript - JWT 刷新 token 策略

c# - 使用 WPF C# 同时对两个 UIElement 进行动画处理

javascript - addEventListener 到页面的整个主体,除了一个 div

javascript - 根据另一个下拉列表的选定值生成下拉选项

javascript - 使用 Redux Saga 每 X 秒发送一次 Action

javascript - 如何使用typeof string过滤出键值对

c# - 异步从数据读取器返回数据

swift - Swift 函数中带闭包和参数的函数的语法

javascript - 当我在 Javascript 中返回 true 时,它​​返回未定义