【发布时间】:2021-05-26 18:30:35
【问题描述】:
我遇到了一个似乎无法解决的问题。首先是一些代码:
<template>
<div>
<q-input name="email" v-model="user.email" />
<q-input name="userName" v-model="user.userName" />
</div>
</template>
<script>
export default {
name: 'UserDetail',
props: {
id: String
},
computed: {
user: {
get () {
return this.$store.state.users.user
},
set (value) {
this.$store.dispatch('users/updateUser', this.id, value)
}
}
}
}
</script>
这里是商店操作:
export function updateUser ({ commit }, id, user) {
if (id !== user.id) {
console.log('Id und User.Id stimmen nicht überein')
} else {
api.put(`/User/${id}`, user).then(response => {
commit('upsertUser', response.data)
}).catch(error => {
console.log(error)
})
}
}
变异:
export const upsertUser = (state, user) => {
const idx = state.userList.findIndex(x => x.id === user.id)
if (idx !== -1) {
state.userList[idx] = user
} else {
state.userList.push(user)
}
if (state.user?.id === user.id) {
state.user = user
}
}
现在据我所知,这符合 vuex 推荐的方式来做这样的事情 (https://vuex.vuejs.org/guide/forms.html#two-way-computed-property)
但我总是收到错误:do not mutate vuex store state outside mutation handlers
我不知道该怎么做。有人能指出我正确的方向吗?
【问题讨论】:
-
澄清一下:在 set 函数中,我调用了一个存储操作,它将更改保存到后端,然后将它们提交到状态。我也试过
$store.commit('user/upsertUser', value),但这也会引发同样的错误。
标签: vuex quasar-framework