zoukankan      html  css  js  c++  java
  • vue入门七之vuex的使用

    一、vuex是什么?

      上官网的解释:Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。接下来看下面的这个图,有个简单一点的图来说明下:

          

      

    • state,驱动应用的数据源;
    • view,以声明方式将 state 映射到视图;
    • actions,响应在 view 上的用户输入导致的状态变化。

       那么它们实际上就是一个单项数据流,上面三条解析的很清楚了,我们在视图上输入数据时就会导致数据源的改变,数据源的改变就会导致视图的改变,就是这么回事,那么现在就容易理解了我们的状态管理是怎么回事了,很简单我们只需要操作状态管理的数据,将其映射到视图上即可。不需要再在子父组件传递参数的麻烦了,我们只需要一个状态机就可以搞定了。

    二、vuex如何使用?

      关键点来了,我们如何来使用它

         还是一步步的来,从安装整起:

        1.在终端输入npm install vuex --save即可安装成功

        2.在package文件下查看'vuex'是否安装成功,如下:

        

         有的话就是安装成功了

        3.创建一个状态机,我这里就直接命名为store了。

          那么创建好之后,我们就可以直接在里面书写相关的属性了,如下:

          

    import Vue from 'vue'
    import Vuex from 'vuex'
    import test from '../components/test.js'
    
    Vue.use(Vuex)
    
    export default new Vuex.Store({
        state:{
            one:5,
            two:6
        },
        mutations:{
            add(state){
                state.one += 1;
                state.two += 1;
            },
            reduce(state){
                state.one -= 1;
                state.two -= 1;
            }
        },
        getters:{
            res(state){
                return state.one + state.two;
            }
        },
    })

      注意是如何进行使用的。

      接下来我们只需要在main.js中引入即可

        

       4.如何使用里面的值,我们就举个最简单的例子,如何使用store里面state里面的数据:

        在官网state提供了一个获取state的方法,这个方法就是$store,比如说我们要获取one,那么现在的操作就是this.$store.state.one

        这个是在获取较少的情况下使用的,获取多个呢?我们该如何来操作呢?那么就用如下的方法:

        这里我提倡使用展开运算符来进行操作:

        

         这上面还要引入vuex里面的mapState属性:

        

         这就是它的大概使用了

    三、内部的各个属性认识

    ··1.第一个就是state,上面我拿它来举例已经说得差不多了,这里就不多说啦

    ··2.第二个就是getter,这个和computed非常的相似,就是当它的依赖发生改变时就会被重新计算,使用的话就看上面的代码getters,下面截图就是把其从状态机中拿出来

      

       当然这个还是要在上面引入mapGetters的,方式和mapState的引入是一样的········································注意上面两个都是要在计算属性computed下面来引入的

    ··3.第三个就是mutiton,就是它自身定义的状态而已

    ····这个就相当于定义了某种方法,我们所有的功能全部放置在里面。这样就类似于我们工厂,对应的厂房里面就有对应能生产工件的方法,将功能给独立开来。

    ····那么里面的函数就是想当于我们的功能,例如上面的add增加函数,它接收一个参数,这个参数就是state,是默认指定的参数,第二个参数就是我们的载荷,简单点来理解就是我们的形参,我们使用用commit调用它时所传入的数据,看下面:

    ····   映入后我们直接在标签中定义@click="add"调用即可

    ····注意要传入参数的话直接在add函数里传入即可,那么store里面是怎么书写的呢?

    ····

    ····官方也提供this.$store.commit("add")进行触发,当然这不是优先考虑的

    ··4.第四个就是action,我们这个主要用来处理异步操作的(注意上面的mutition只能够处理同步)

    ····这个内部函数的第一个参数就是context,这个context上面可以获取getters和state,还有通过context.commit来触发mutitions,还可以通过context.dispatch来触发action,那么下面就来一段:

    ····  直接通过dispath()触发即可,当然还可以在methods直接 

    ····下面是我在仓库内部所写的异步代码:

     如果想在data里面使用add时,只需要context.commit("add")即可

    ··5.module这个就简单啦,为什么有它的出现,原因是因为由于使用单一状态树,应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂时,store 对象就有可能变得相当臃肿。

    ····module就是为了解决代码臃肿的问题,它允许我们将状态进分割成各个模块,那么我们每个模块对应一个状态,这样很利于我们进行相关的操作

    ····具体如何实现的呢?

    ····下面就是我们的test模块,它就是一个对象,我们只需要在vuex中引入即可

    export default{
        namespaced:'test',
        state:{
            one:5,
            two:6
        },
        mutations:{
            add(state,payload){
                state.one += 1;
                state.two += 1;
            },
            reduce(state,payload){
                state.one -= 1;
                state.two -= 1;
            }
        },
        getters:{
            res(state){
                return state.one + state.two;
            }
        },
        actions:{
            async data(context,pl){
                await new Promise((resolve,reject)=>{
                    resolve(1);
                }).then( res=>console.log(res))
            }
        }
    }

    我们将在总的状态机里面进行管理,我们现在只需要引入即可,代码如下:

          这里特别注意的一点是我们的namespaced  它是将我们各个模块进行区分,避免了我们模块之间的重复

    ····还有一个点就是我们映射时也会做一些相应的改变:

    ······    注意在映射的时候就要加上每个模块的名称了,代表的是每个模块下面的方法

    ····以上就是五个属性的简单使用,到这里就应该是大概明白啦

    四、一点小总结

      最后我们要做一个项目实际上不需要很多的知识,只需要我们会一部分知识就可以了,如果想往更长远的去发展,那么建议多去阅读下底层的东西,无论是自己的认识还是自己的工资肯定还是有一定的提升的。

    Getter

  • 相关阅读:
    浙江工业大学校赛 小马哥和数列
    浙江工业大学校赛 XiaoWei的战斗力
    浙江工业大学校赛 猜猜谁是我
    浙江工业大学校赛 竹之书(大数,同余定理)
    浙江工业大学校赛 画图游戏 BugZhu抽抽抽!!
    浙江工业大学校赛 画图游戏
    pta 天梯地图 (Dijkstra)
    Atom打造 c/c++编译环境(忙了一个上午)
    HRBUST
    CSU 1808 地铁 (Dijkstra)
  • 原文地址:https://www.cnblogs.com/dy105525/p/12811248.html
Copyright © 2011-2022 走看看