首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >not错误:[ vuex ]在从插件中突变时不要变异vuex存储状态外部的突变处理程序

not错误:[ vuex ]在从插件中突变时不要变异vuex存储状态外部的突变处理程序
EN

Stack Overflow用户
提问于 2019-02-27 06:59:35
回答 2查看 1.2K关注 0票数 3

我在一个Nuxt项目的旁边使用Firebase,在下面的插件中,我调用onAuthStateChanged来检查用户是否已经登录,如果他是,我会设置用户状态并将他重定向到仪表板,如下所示:

代码语言:javascript
复制
import firebase from 'firebase'

export default ({ store, redirect }) => {
  if (!firebase.apps.length) {
    const config = {
      apiKey: 'AIzaSyDFS8Wk6B7ontvZeargY3z7k0u92EJvlN0',
      authDomain: 'jammer-bd4bc.firebaseapp.com',
      databaseURL: 'https://jammer-bd4bc.firebaseio.com',
      projectId: 'jammer-bd4bc',
      storageBucket: 'jammer-bd4bc.appspot.com',
      messagingSenderId: '156254683024'
    }

    firebase.initializeApp(config)
  }

  firebase.auth().onAuthStateChanged((user) => {
    if (user) {
      store.commit('auth/setUser', user)
      redirect('/dashboard')
    } else {
      redirect('/')
    }
  })
}

插件在我的nuxt.config.js中引用如下:

代码语言:javascript
复制
plugins: [
  '~/plugins/firebase'
],

但是,当我们到达存储提交时,会出现以下错误:

错误: vuex不变异vuex存储状态之外的变异处理程序

就像我在插件中直接改变状态一样(正如你所看到的,我没有)。

是什么导致了这个问题?

EN

回答 2

Stack Overflow用户

发布于 2019-02-27 07:49:06

这是因为您正在将firebase用户对象转到您的vuex存储区。后来,它可以通过火药库本身来改变。所以解决办法是先克隆它,然后再加入vuex。

票数 3
EN

Stack Overflow用户

发布于 2019-02-27 14:48:15

是的,你在变异商店。

commit()引发突变。

dispatch()启动一个动作

因此,简单的解决办法是使用dispatch('auth/setUser'),这是一个非常简单的action,它调用commit('auth/setUser')

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54899762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档