store中存取的为整个项目的公共变量,通过设置mutation来改变他们

假设现有如下代码:

const store = new Vuex.Store({
state: { userInfo:{
name:''
}
},
mutations: { setuserInfo:(state,value) => {
const obj = state;
obj.userInfo = value
}
},
getters:{ }
})

我们定义了一个userInfo变量,通过mutation方法,

1,在页面A中 我们开启keepAlive,并在第一次mounted的时候将该页面的userInfo(记录为vara)赋值为this.$store.state.userInfo(记录为varb);

2,然后我们在B页面中改变store中的这一变量:this.$store.commit('setuserInfo',res);

3,当我们回到A页面时,发现userInfo还是改变了,那么问题来了 ,我只在mounted的时候 将varb的一份引用复制给vara,之后在B页面改变的时候 使得 vara的指向另外一个res,按理来说vara还是指向之前的varb,可是结果仍旧是vara改变了

可能的原因解释:

在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源码 ,所以是否这样解释正确??
未完待续。。。。。。。。。。。。

最新文章

  1. 4. web前端开发分享-css,js工具篇
  2. Java多线程--线程安全问题的相关研究
  3. iOS项目旋转控制
  4. LNMP 部署
  5. 71 fdisk-Linux 的磁盘分区表操作工具。
  6. 2015弱校联盟(1) -J. Right turn
  7. Chrome商店Crx离线安装包下载
  8. C#中登录验证FormsAuthentication
  9. Sql狗血的Bit类型赋值与取值
  10. 用PHP实现一个高效安全的ftp服务器(二)
  11. Linux Shell编程(2)——第一个shell程序
  12. myeclipse插件安装
  13. char *p 和char *p[]
  14. JavaScript 入門
  15. C语言中,#include <>和#include ""的区别和注意点
  16. mac系统下安装jdk并配置环境变量
  17. Matplotlib学习---用matplotlib画直方图/密度图(histogram, density plot)
  18. vue计算属性和侦听器
  19. Saiku二次开发获取源代码在本地编译(五)
  20. IO多路复用的机制:select、poll、epoll

热门文章

  1. Redux中间件之redux-thunk使用详解
  2. 移动端触摸、点击事件优化(fastclick源码学习)
  3. Android Release 打包提示 "错误:找不到符号"
  4. SpringBoot之Web进阶
  5. 关于VS调试
  6. php面试专题---MySQL分表
  7. BZOJ 5170: Fable
  8. isset、empty 误区
  9. Linux(RHEL7)下安装vsftp服务
  10. P1582倒水