zoukankan      html  css  js  c++  java
  • 关于vuex中的状态变量的思考???

    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源码 ,所以是否这样解释正确??
    未完待续。。。。。。。。。。。。
  • 相关阅读:

    转:在自己的工具条中使用ArcGIS Engine提供的命令和工具
    配置Subversion Apache TortoiseSVN
    vc++2005移除自定义向导目录
    NetAdvantage2006 For ASP.NET2.0印象
    三天了!今天终于成功安装ArcIMS9.2!
    vss 去除源代码管理
    转:设计模式趣谈
    转一篇:有关项目报告
    演练:使用 Visual Studio Team Test 进行单元测试
  • 原文地址:https://www.cnblogs.com/tony-stark/p/11670873.html
Copyright © 2011-2022 走看看