【发布时间】:2021-11-18 01:46:08
【问题描述】:
我正在使用 Nuxt
我有一个简单的“Drawer.vue”组件。
在我的用户执行登录后,我尝试显示带有抽屉的页面。
如果登录成功,“auth”中间件会通过“/me”后端端点接收“菜单项”到抽屉。
我的问题是我收到下一个错误。 我已经看到这个问题Vuex - Do not mutate vuex store state outside mutation handlers,但是我没有在突变处理程序之外更改 vuex 存储状态。
//错误:
Error: [vuex] do not mutate vuex store state outside mutation handlers.
at assert (vuex.esm.js?2f62:135)
at Vue.store._vm.$watch.deep (vuex.esm.js?2f62:893)
at invokeWithErrorHandling (vue.runtime.esm.js?2b0e:1863)
at Watcher.run (vue.runtime.esm.js?2b0e:4584)
at Watcher.update (vue.runtime.esm.js?2b0e:4558)
at Dep.notify (vue.runtime.esm.js?2b0e:730)
at Object.reactiveSetter [as items] (vue.runtime.esm.js?2b0e:1055)
at eval (Drawer.vue?c84c:43)
at Array.filter (<anonymous>)
at VueComponent.flatFilter (Drawer.vue?c84c:40)
// Drawer.vue
<template>
<div>
{{ computedItems }}
</div>
</template>
<script>
import { mapGetters } from 'vuex'
export default {
name: 'DashboardCoreDrawer',
data: () => ({
menuFiltered: [],
defaultMenu: [
{
icon: 'mdi-view-dashboard',
title: 'Dashboard',
to: '/',
visible: 1,
},
],
}),
computed: {
...mapGetters(['menuUser']),
computedItems() {
return this.menuFiltered
},
},
watch: {
menuUser(newValue) {
this.menuFiltered = this.filterItems(newValue)
},
},
methods: {
flatFilter(nestedProp, compareKey, compareId, arr) {
return arr.filter((o) => {
const keep = o[compareKey] !== compareId
if (keep && o[nestedProp]) {
o[nestedProp] = this.flatFilter(
nestedProp,
compareKey,
compareId,
o[nestedProp]
)
}
return keep
})
},
filterItems(arr) {
const items = [...arr]
const res = this.flatFilter('items', 'visible', 0, items)
return res
},
},
}
</script>
// index.js,在 Nuxt 存储文件夹中:
export const getters = {
menuUser(state) {
return state.auth.user?.menu || []
},
}
【问题讨论】:
-
AFAIK,我没有在我的代码中更改 vuex 存储状态。
标签: javascript vue.js nuxt.js