【发布时间】:2020-12-30 01:22:56
【问题描述】:
我想使用 VUE 3 创建一个简单的 Snackbar。我已经在 Vue 2 中完成了这项工作,但 Vue3 的工作方式似乎略有不同。
我已将消息数组保存在商店中,如下所示:
import { createStore } from 'vuex'
export default createStore({
state: {
snackbarText: []
},
mutations: {
DELETE_SNACKBAR_MESSAGE(state) {
state.snackbarBarText.shift()
},
ADD_SNACKBAR_MESSAGE(state, message) {
state.snackbarBarText.push(message)
}
},
getters: {
MESSAGES: (state) => state.snackbarText
}
})
这就是我目前在 Snackbar.vue 组件中的内容:
import { useStore } from 'vuex';
import { ref, watch} from 'vue';
export default {
set() {
const store = useStore();
const text = ref(store.getters["MESSAGES"]);
if (text.value.length) {
let timer = setInterval(() => {
store.commit('DELETE_SNACKBAR_MESSAGE');
if (text.value.length) {
clearInterval(timer)
}
}, 3000)
}
return { text }
}
}
有没有办法检查 Snackbar 中 text 引用的长度并调用启动计时器的函数?我只是很难在 Vue3 中实现这一点,因为我还不太熟悉 Composition API。
它应该工作的方式是将消息添加到数组中并显示给用户。 3 秒后,它们从阵列中移除。使用 watch 很笨拙,并且在 setInterval 停止后我很难重新启动它。
谢谢!
【问题讨论】:
标签: javascript vue.js vuejs3