store中存取的为整个项目的公共变量,经过设置mutation来改变他们vue
假设现有以下代码:vuex
const store = new Vuex.Store({ state: { userInfo:{ name:'' } }, mutations: { setuserInfo:(state,value) => { const obj = state; obj.userInfo = value } }, getters:{ } })
咱们定义了一个userInfo变量,经过mutation方法,this
1,在页面A中 咱们开启keepAlive,并在第一次mounted的时候将该页面的userInfo(记录为vara)赋值为this.$store.state.userInfo(记录为varb);spa
2,而后咱们在B页面中改变store中的这一变量:this.$store.commit('setuserInfo',res);code
3,当咱们回到A页面时,发现userInfo仍是改变了,那么问题来了 ,我只在mounted的时候 将varb的一份引用复制给vara,以后在B页面改变的时候 使得 vara的指向另一个res,按理来讲vara仍是指向以前的varb,但是结果仍旧是vara改变了blog
可能的缘由解释:get
在3步骤中咱们声明了个一个赋值操做:源码
const obj = state; obj.userInfo = value
这一步的根本意思应该是将 state.
userInfo 按照属性一一赋值于value;即为了保证初始的那个引用,这里的vue内部实际操做应该是: for(let j in value){ obj.userInfo[j] = value[j]}保证了其初始应用,那么 this.userInfo和this.$store.state,userInfo始终指向同一个应用,因此this.userInfo也跟着改变了未深刻vuex源码 ,因此是否这样解释正确??未完待续。。。。。。。。。。。。