【发布时间】:2020-01-18 22:31:39
【问题描述】:
首先,让我说 v-navigation-drawer 按预期工作,即:
- 单击汉堡菜单时,TOGGLE_DRAWER 突变被提交,它切换打开/关闭,更新状态。
- 在调整窗口大小时,它会在指定的断点处打开/关闭
所以它起作用了。
但是窗口调整大小没有正确切换突变,当我调整窗口大小时,我不断收到 Vuex 突变错误:
我明白为什么会出现此错误 - $store.state.ui.drawer 正在修改器之外进行修改(它是 v-navigation-drawer 的 v-model):
<v-navigation-drawer
v-model="$store.state.ui.drawer"
app
clipped
>
我认为将状态绑定到 v-model 是一种糟糕的形式。但是,当我尝试使用 get() 和 set() 正确获取/提交突变的方法创建 drawer 计算属性时,浏览器崩溃(可能是因为 set 方法触发了无限循环的提交切换 drawer true /false 到无穷大):
computed: {
drawer: {
get () {
return this.$store.state.ui.drawer
},
set () {
this.$store.commit('TOGGLE_DRAWER') // <--crashes the browser
}
}
}
我一直在寻找解决这个问题的方法。尽管它在视觉上似乎可以正常工作,但它却让我感到烦恼。
我考虑过在stateless 模式下运行 v-navigation-drawer 并手动处理所有窗口调整大小事件和状态更新。我还考虑在 Vuex 中禁用“严格”模式(这会隐藏错误)。但前者要复杂得多,而后者是一个创可贴,需要我在开发中调试洞察力。
【问题讨论】:
标签: vue.js vuejs2 vue-component vuex vuetify.js