【发布时间】:2021-11-10 08:40:42
【问题描述】:
我知道watch 在beforeUpdate 生命周期事件发生之前运行。但是,我在 watch 中有一些东西必须在重新渲染/更新虚拟 DOM 之前完成。
我的watch是这样的:
setup () {
watch(() => $route.params.ProductID, async () => {
// Update Vuex here with ProductID data and then do a whole bunch of stuff here that must complete before updating the DOM
},
{
deep: true,
immediate: true
})
onBeforeUpdate(() => {
// Use stuff that was created in watch above
})
}
此代码不仅由客户端运行,还为 SSR 服务端运行。
我曾尝试测试watch 是否会在onBeforeUpdate() 像这样运行之前先完成所有任务:
setup() {
async function testWatch(){
setTimeout(function(){ return console.log("I am watcher timeout"); }, 3000);}
setup () {
watch(() => $route.params.ProductID, async () => {
await testWatch();
},
{
deep: true,
immediate: true
})
onBeforeUpdate(() => {
console.log("I am onBeforeUpdate hook");
})
}
}
如果我运行上面的命令,我会得到以下输出:
I am onBeforeUpdate hook
然后 3 秒后..
I am watcher timeout
如何确保watch 中的代码将在组件中的其他任何内容之前执行?我需要这样做,以便组件在渲染之前可以使用正确的数据。
【问题讨论】:
标签: javascript node.js vue.js vuejs3