rails-webpacker-vue: vuex state值改变,相应的computed值却仍为初始值

环境:rails webpacker: vue + vuex + vue-router + iview
问题:通过mutation改变state值,通过vue浏览器调试工具可以看到mutation正常触发,但computed获取对应state值的变量却仍然为state的初始值

测试:拉取了项目:https://github.com/gorails-screencasts/vuejs-trello-clone, 在其中测试,表现正常
+++++++++++++++++++
与vuejs-trello-clone项目一样,开启了turbolink, 但没什么帮助,问题依旧
+++++++++++++++++++
补充:

// store.js
state: {
    testObj: {},
    test: false
  },
  mutations: {
    updateObj (state, obj) {
      state.testObj = obj
    },
    updateTest (state, value) {
      state.test = value
    }
  }

// pageA.vue path:'/pagea' name: 'pagea'
this.$store.commit('updateObj', objData)
this.$store.commit('updateTest', true)

// comB.vue pageA的子组件
computed: {
    test() {
      return this.$store.state.test
    },
    testObj() {
      return this.$store.state.testObj
    }
  }

简化的主要过程如上,估计得附一整个项目对找问题原因才有帮助
++++++++++++++++++++++++
2018-04-12补充:
问题重现demo: https://github.com/BoleLee/ra...
启动项目,首页即可测试

阅读 3.5k
3 个回答

此问题已经解决,可见此issue#1423

// import Vue from 'vue/dist/vue.esm'
import Vue from 'vue'

修改引用 vue 的版本,问题就解决了,可能是由于我有的地方用的是 vue.esm, 有的直接用 vue, 导致冲突,这个问题也引起有时候会报[Vue warn]

不贴代码怎么帮你看嘛- -

这么看是没有问题

this.$store.commit('updateObj', objData) 
this.$store.commit('updateTest', true) 

这段代码是在哪里运行的?mutation 必须是同步的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进