• 初识Vuex


    Vuex是什么

    Vuex是一个专为Vue开发的应用程序的状态管理模式,它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。
    Vuex采用类似全局对象的形式来管理所有组件的公用数据,如果你想想修改这个全局对象的数据?是可以的,但没那么简单,你得按照Vuex提供的方式来修改,不能自己随意用自己的方式来修改。

    使用Vuex的好处

    为什么说只是类似全局对象呢?

    说的是类似,就代表它跟我们之前使用的定义全局对象变量还不完全一样。主要有一下两点不同:

    • 1.Vuex的状态存储是响应式的,什么意思呢?就是当你的组件使用到了这个Vuex的状态,一旦它改变了,所有关联的组件都会自动更新相对应的数据,这样开发者省事很多。

    • 2.你不能直接修改Vuex的状态,如果是个全局对象变量,要修改很容易,但是在Vuex中不能这样做,想修改就得使用Vuex提供的唯一途径:显示地提交(commint)mutations来实现修改。这样做的好处就是方便我们跟踪每一个状态的变化,在开发过程中调试的时候,非常实用。

    以上两点是Vuex状态管理跟使用传统全局变量的不同之处,也是Vuex的优势所在。那是不是所有使用vue开发的SPA(single page application)单页应用都适合采用Vuex呢?

    适用场景

    当然也不是,如果你的应用是个小型的应用,组件不多,组件之间的状态依赖不多,关系清晰容易维护,也就是说不同组件之间很少有数据之间的关联的话,那么你大可不用Vuex来开发。

    反之,如果你开发的是较大型的应用,出现多个视图组件共同依赖一个状态,这个状态相当于我们的全局对象数据,其他组件的改动,会影响到它,反之,它的修改也需要更新其他关联的组件,那么Vuex就很适用。比如:商城系统,外卖系统等等。

    如何使用Vuex

    (1)创建仓库Store
    要使用Vuex,我们要创建一个实例 store ,我们称之为仓库,利用这个仓库 store 来对我们的状态进行管理。

     //创建一个 store
     const store = new Vuex.Store({});
    

    (2)核心:state
    Vuex的作用类似全局对象,Vuex 使用单一状态树,用一个对象State包含了整个应用层级的所有状态,你可以理解为这些状态就是一堆全局变量和数据。

     //创建一个 store
     const store = new Vuex.Store({
        //state存储应用层的状态
        state:{
            count:5  //总数:5
        }
     });
    

    上面的例子中,假设我们有一个全局状态count的值为5。那么,我们就可以将其定义为 state 对象中的key和value,作为全局状态供我们使用。

    state 中的状态被各个组件关联着,在开发调试过程中,我们可以结合vue-devtool工具,可以清晰地看到整个应用的数据,非常方便。

    (3)核心:Getters
    当我们需要在data的基础上再派生一些状态的时候,就会使用computed来实现。

    同样,当我们需要从 state 中派生出一些状态的时候,就会使用到 getters ,你可以将 getters 理解 state 的计算属性。

    getters 接受 state 作为其第一个参数:

      const store = new Vuex.Store({
       //state存储应用层的状态
       state:{
          count:5  //总数:5
        },
        //派生出来的状态
       getters:{
          //ES6 的箭头函数语法
        newCount:state => state.count * 3
        }
     });
     
    

    (4)核心:Mutations
    Vuex给我们提供修改仓库 store 中的状态的唯一办法就是通过提交mutation。我们来看看如何定义一个mutation,它和上面的 getters ,会接受 state 作为第一个参数:

    const store = new Vuex.Store({
        //state存储应用层的状态
        state:{
            count:5  //总数:5
        },
        //更改store状态的唯一途径
        mutations:{
            increment(state){
                state.count ++;
            }
        }
     });
    

    我们再 mutations 中定义了一个叫increment的函数,函数体就是我们要进行更改的地方,可以看到,我们只是简单地对 state 中的count进行了自增运算。

    mutations 我们是定义好了,怎么使用呢?
    Vuex要求我们要想通过 mutations 更改内容,就必须提交mutation,语法如下:

    
      //提交一个名为increment的mutation
     store.commit('increment');
     
    

    我们再提交commit 时候,字符串参数increment,就是对应在 mutations 中的increment。

    此外,store.commit( ) 还接受其他额外的参数,比如:

     
     //...
     //更改store状态的唯一途径
     mutations:{
        increment(state,n){
            state.count += n;
        }
     }
     //...
     store.commit('increment',10);
    

    我们在提交的时候额外传了参数10,只要在定义 mutations 的时候定义与之相对应的形参就可以处理了。

  • 相关阅读:
    【转】Yeoman自动构建 Angularjs 项目
    【转】jquery的extend和fn.extend
    Centos查看已经安装的软件或者包
    Big Boss
    利用防火墙实现向外网提供内网web和dns服务
    从浏览器控制和管理 Android 及iOS设备 stf
    python 3 解决 ERROR: Could not find a version that satisfies the requirement xxx 的问题
    一直在说高并发,多少QPS才算高并发?
    压力/负载/性能(强度、容量、稳定性)测试之异同
    CPU利用率、内存利用率、磁盘IO、网卡负载解读和学习
  • 原文地址:https://www.cnblogs.com/Juphy/p/7089198.html
Copyright © 2020-2023  润新知