Vuex 提交触发太快
Vuex commit fires too fast
我有一个带有创建方法的组件:
created() {
this.initMap();
}
initMap是用来初始化Google个maps的,取决于URL段是否对应'map'
像这样:
initMap() {
const pathname = location.pathname.replace(/\/+$/, '');
const segment = pathname.split('/').pop();
if (segment === 'map') this.showMap();
}
上面的代码有一个 ShowMap
执行 Vuex 提交的方法:
showMap() {
this.$store.commit('showMap');
}
然而,此提交从未出现在我的 Vue.js devtools(在 Vuex 下)。监视 showMap
正在更改的 Vuex 存储值的组件也从未触发。
如果我这样做:
setTimeout(() => {
this.$store.commit('showMap');
, 100);
一切都按预期进行。
我尝试这样做是因为更改实际上发生在我的 Vue.js 开发工具中,因为如果我在 state
下查看,我可以看到更新的值。
Vuex 提交似乎触发得太快了。有什么可以做的吗?为什么会发生这种情况?
我什至可以将 console.log()
放入 showMap 提交中并且它可以工作,但它仍然没有在 devtools 中被拾取并且没有 setTimeout
我所有的观察者仍然不正确触发器。
由于这是不久前的事,所以我不是 100% 确定我是如何解决这个问题的,但我认为是通过使用 Vue.js 中的 $nextTick
。
通过等待 nextTick
,您可以确保 DOM 更新的调用堆栈已被清除。这可以防止 DOM 可能依赖于 DOM 其他部分的更新触发得太快。
显然,这比简单地设置一个 setTimeout
更可靠,让我们从我的例子中说 100
毫秒,因为如果你的 DOM 没有及时更新它可能仍然通过这个 window.
如果 setTimeout
解决了您的问题,我建议尝试 $nextTick
。
我有一个带有创建方法的组件:
created() {
this.initMap();
}
initMap是用来初始化Google个maps的,取决于URL段是否对应'map'
像这样:
initMap() {
const pathname = location.pathname.replace(/\/+$/, '');
const segment = pathname.split('/').pop();
if (segment === 'map') this.showMap();
}
上面的代码有一个 ShowMap
执行 Vuex 提交的方法:
showMap() {
this.$store.commit('showMap');
}
然而,此提交从未出现在我的 Vue.js devtools(在 Vuex 下)。监视 showMap
正在更改的 Vuex 存储值的组件也从未触发。
如果我这样做:
setTimeout(() => {
this.$store.commit('showMap');
, 100);
一切都按预期进行。
我尝试这样做是因为更改实际上发生在我的 Vue.js 开发工具中,因为如果我在 state
下查看,我可以看到更新的值。
Vuex 提交似乎触发得太快了。有什么可以做的吗?为什么会发生这种情况?
我什至可以将 console.log()
放入 showMap 提交中并且它可以工作,但它仍然没有在 devtools 中被拾取并且没有 setTimeout
我所有的观察者仍然不正确触发器。
由于这是不久前的事,所以我不是 100% 确定我是如何解决这个问题的,但我认为是通过使用 Vue.js 中的 $nextTick
。
通过等待 nextTick
,您可以确保 DOM 更新的调用堆栈已被清除。这可以防止 DOM 可能依赖于 DOM 其他部分的更新触发得太快。
显然,这比简单地设置一个 setTimeout
更可靠,让我们从我的例子中说 100
毫秒,因为如果你的 DOM 没有及时更新它可能仍然通过这个 window.
如果 setTimeout
解决了您的问题,我建议尝试 $nextTick
。