Решением может быть изменение вашей мутации для переключения состояния showSidebar
вместо его установки. Это позволит вам удалить ваши потоки if / else и не беспокоиться о текущем состоянии.
function showNav () {
this.$store.commit(TOGGLE_SHOW_LINK)
setTimeout((vue) => {
vue.$store.commit(TOGGLE_SHOW_SIDEBAR)
}, 500, this)
}
// mutations.js
mutations: {
TOGGLE_SHOW_SIDEBAR (state) {
state.showSidebar = !state.showSidebar
},
TOGGLE_SHOW_LINK (state) {
state.showLink = !state.showLink
}
}
Когда вы проверяете состояние с помощью геттера, как показано ниже, вы, вероятно, ожидаете, что ваш this.$store.getters.showSidebar
стать истинным, когда оно ложно, но вы пропускаете этот 500-миллиметровый эталон между щелчками.
if (this.$store.getters.showSidebar) {
this.$store.commit(SET_SHOW_LINK, false)
setTimeout(() => {
this.$store.commit(SET_SHOW_SIDEBAR, false)
}, 500)
} else {
this.$store.commit(SET_SHOW_SIDEBAR, true)
setTimeout(() => {
this.$store.commit(SET_SHOW_LINK, true)
}, 500)
}
Еще одно решение, которое я рекомендую, - отключение элемента, вызывающего showNav, до истечения времени ожидания, но первого решения может быть достаточно .