vuex,getters只执行了一次,数据更新getters的数据没有更新

在项目中遇到一个问题,用vuex管理状态和数据,actions->mutations->state 这种方式去修改state数据,getters获取数据,组件中在computed去更新获取的数据,问题是数据在mutations中更新,但在getters中没有更新,而且getters只执行了一次 是什么原因呢?

store中:
图片描述

组件中:

clipboard.png

触发submmitForm()方法会去请求数据

阅读 18.1k
10 个回答

刚好碰到这个问题,对vue不是很熟悉,第一次用,看了一下文档,把原来的写法:currentRouter:state=>state.routerConfig.currentRouter 改成 currentRouter:state=>()=>state.routerConfig.currentRouter ,同时,获取的时候是个函数应用,你执行一下就好了,这样拿到的getter数据就不是原来缓存的数据了。

getters少了return

建议自己好好看一下 vuex 官方文档吧, mutation 改变的是 state 的一个属性, 不是直接改变 state 本身的

问题解决了,有几种方案,一个是用mapState,一个是把这个
clipboard.png 改为赋值形式

@Msevensun 我现在情况和你一样 但是我用了mapState为什么 打印的还是初始给的数据而不是异步过来更改过的数据啊

感觉题主最后给出的解决方案很含糊啊,而且经测试好像不行的,我是这样解决的:
在文件顶部先引用vue,mutaions里面这样写,Vue.set(state,'messageList',res.data.messageList);通过这种方式就可以触发getters的更新

Vuex 允许我们在 store 中定义“getter”(可以认为是 store 的计算属性)。就像计算属性一样,getter 的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算。

很明显笔者应该是自己的demo 出了问题;

这个我刚刚也碰到,是因为变量没有在state中初始化。检查下是否有初始化:
state:{

messageList:[]

}

新手上路,请多包涵

mutations 里面对state值的修改没有被getters监听到,getters输出的还是缓存所以没有改变,解决方案可以尝试换一种mutations里修改state的方式

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