首页 > 解决方案 > Vuex 无法停止 setInteval

问题描述

我在 Vuex 中有一个方法:

export const startTime = ({ commit, state }, status) => {
    let timeInterval
    
    if(status) {
        const timer = 1000
        timeInterval = setInterval(() => {
            console.log('x')
            commit('SET_RUNNED_TIME', parseInt(state.runnedTime += timer))
        }, timer)
    }
    else {
        console.log('y')
        clearInterval(timeInterval)
        commit('SET_RUNNED_TIME', 0)
    }
}

从我的组件中,我发送 valuetruefalseto method startTime()。当我发送truethen 方法时运行 commit SET_RUNNED_TIME。但是当我发送false clearInterval(timeInterval)不停止setInterval并且仍在发送时commit('SET_RUNNED_TIME' ...)

标签: vuexsetintervalclearinterval

解决方案


变量timeInterval在函数的范围内。如果你想让它在不同的调用之间继续存在,startTime你需要把它放在函数范围之外。例如在该州。


推荐阅读