Vue,错误 [vuex] 不会在突变处理程序之外改变 vuex 存储状态
Posted
技术标签:
【中文标题】Vue,错误 [vuex] 不会在突变处理程序之外改变 vuex 存储状态【英文标题】:Vue, error [vuex] do not mutate vuex store state outside mutation handlers 【发布时间】:2020-10-31 19:39:23 【问题描述】:这是原始代码。很简单,签到表。我们有电子邮件字段,密码。它接受这个参数并在单击提交按钮时检查用户并将他的 user.uid 写入 Vuex。但是我收到了上面标题中列出的错误。我做了研究,看起来这是 Vuex 中的一个常见问题,因为这些字段有时会“即时”更新 Vuex 商店,这在我的情况下是错误的,因为它只会在您按下提交按钮时更新 Vuex 商店。无论如何决定纠正看起来像 this 并且仍然没有运气
原代码
<template>
<div class="form__inner">
<div class="overlay" @click="$store.commit('logReg/logIn')"></div>
<v-container
fill-height
fluid>
<v-row
align="center"
justify="center">
<v-col cols="2">
<v-card>
<v-card-title>
Log in
</v-card-title>
<v-card-text>
<v-text-field placeholder="Email"
v-model="logIn"/>
<v-text-field placeholder="Password"
v-model="password"/>
</v-card-text>
<v-card-actions>
<v-btn color="success"
class="mx-auto"
@click="signIn">Log me in</v-btn>
</v-card-actions>
</v-card>
</v-col>
</v-row>
</v-container>
</div>
</template>
<script>
export default
data()
return
logIn: '',
password: ''
,
methods:
async signIn()
let res = await this.$fireAuth.signInWithEmailAndPassword(this.logIn, this.password);
this.$store.commit('userState', res);
</script>
我的vuex
export const state = () => (
user: null
)
export const mutations =
userState(state, authUser)
state.user = authUser;
我尝试修复仍然没有运气的问题,给出同样的错误
<template>
<div class="form__inner">
<div class="overlay" @click="$store.commit('logReg/logIn')"></div>
<v-container
fill-height
fluid>
<v-row
align="center"
justify="center">
<v-col cols="2">
<v-card>
<v-card-title>
Log in
</v-card-title>
<v-card-text>
<v-text-field placeholder="Email"
v-model="logIn"/>
<v-text-field placeholder="Password"
v-model="password"/>
</v-card-text>
<v-card-actions>
<v-btn color="success"
class="mx-auto"
@click="signIn">Log me in</v-btn>
</v-card-actions>
</v-card>
</v-col>
</v-row>
</v-container>
</div>
</template>
<script>
export default
data()
return
logIn: '',
password: ''
,
computed:
logg:
get()
return this.logIn;
,
set(val)
this.logIn = val;
,
pass:
get()
return this.password;
,
set(val)
this.password = val;
,
methods:
async signIn()
let res = await this.$fireAuth.signInWithEmailAndPassword(this.logg, this.pass);
this.$store.commit('userState', res);
</script>
【问题讨论】:
尝试在codeandbox中重现您的问题,这样就可以清楚地找到实际问题 【参考方案1】:你必须像这样使用突变:
<script>
import mapMutations from 'vuex';
export default
data()
return
logIn: '',
password: ''
,
methods:
...mapMutations(
userState: 'userState'
),
async signIn()
let res = await this.$fireAuth.signInWithEmailAndPassword(this.logIn,this.password);
this.userState(res);
</script>
【讨论】:
以上是关于Vue,错误 [vuex] 不会在突变处理程序之外改变 vuex 存储状态的主要内容,如果未能解决你的问题,请参考以下文章
Vuex 突变引发错误 - 不要在突变处理程序之外改变 vuex 存储状态
Nuxt / Vue - 不要在突变处理程序之外改变 vuex 存储状态
错误:[vuex] 不要在突变处理程序之外改变 vuex 存储状态
错误:[vuex] 不要在突变处理程序之外改变 vuex 存储状态。 NUXT