• 68. VUEX 认识Module


    Vue使用单一状态树,那么也意味着很多状态都会交给 Vuex来管理.
    当应用变得非常复杂时,store对象就有可能变得相当臃肿

    为了解决这个问题, Vuex允许我们将store分割成模块 (Module), 而每个模块拥有自己的state、mutation、 action、getters等

    当然这种写法肯定是比较清晰的:

    如果下图这样的代码 怎么访问模块a的name?  

     那么我们在App.vue中访问看看:

     

     我们没在state中定义a ,怎么会有a呢,其实它是把moudle中的a对象,放在state中,然后你就可以获取了,可以看调试:

     我们没在state定义任何东西,他却有个a,所以这就是moudle。



    moudule中Mutations的使用【修改state的值 和 传参】

    其实也一样 在最外层直接获取,,下面代码演示修改木块a中state中的name为 'lisi'  :

    【其实和普通的传参和修改一样直接commit】

    <template>
      <div id="app">
        <p>A模块中的 name :  {{$store.state.a.name}}</p>
        <button @click="updateName">修改name 为 lisi</button>
      </div>
    </template>
      
    
    <script>
    export default {
        methods:{
          updateName(){
            this.$store.commit('updateName','lisi')    //传参给模块a中Mutations,,,,这个直接commit即可 没改变
          }
        }
      }
      
    </script>
    
    
    <style scoped>
    
    </style>
    App.vue App组件
    import Vue from 'vue'
    import Vuex from 'vuex'
    
    Vue.use(Vuex)   
    
    const moudleA = {
        state:{
            name:"BiHu"   
        },
        mutations:{
            updateName(state,payload){
                state.name = payload            //payload是外部参数
            }
        }
    }
    
    const myVuex = new Vuex.Store({
        state:{
            
        },
        modules:{
            a:moudleA
        }
    });
    
    
    export default myVuex   //导出VUX对象
    index.js VUEX配置文件


    moudule中Getters的使用

    模块中的getters和普通的getters有一个区别,就是 模块中的getters 有三个参数,比普通的多1个:

    下面演示在name的基础上 加点字符串

    <template>
      <div id="app">
        <p>加了字符串后的 name(BiHu) :  {{$store.getters.updateName}}</p>
    
      </div>
    </template>
      
    <script>
    export default {
        methods:{
          
        }
    }
      
    </script>
    
    
    <style scoped>
    
    </style>
    App.vue App组件
    import Vue from 'vue'
    import Vuex from 'vuex'
    
    Vue.use(Vuex)   
    
    const moudleA = {
        state:{
            name:"BiHu"   
        },
        getters:{
            updateName(state,getters,rootState){
                //三个参数 一个是本身的state,二个是本身自己,三个是根store的state对象,这样可以调用state中的东西
                console.log(rootState);
                return state.name + " | 被添加的字符串(根store中的state中的name): " + rootState.name
            }
        }
    }
    
    const myVuex = new Vuex.Store({
        state:{
            name:"state中的字符串name"
        },
        modules:{
            a:moudleA
        } 
    });
    
    
    export default myVuex   //导出VUX对象
    index.js VUEX配置文件

    所以可以看到 主要是模块中的getters第三个参数是 根store的state对象,这样就可以随时去获取根state中的值了



    moudule中action的使用

    它里面的action也是一样用来异步操作的,但是呢,模块里的action和普通的不一样,其主要区别就是在于 函数里的上下文,,,,,普通actions函数里的contex和router差不多,但模块里的 上下文

    它的作用域只有 本模块 相当代表本模块而已,,,我们可以打印看看,它里面也是一样的stata mutations 等。。。

      

    可以看到不同了吧 连rootGetters和rootState的都有....

    代码如下:

    <template>
      <div id="app">
        <p>Name:{{$store.state.a.name}}</p>
        <button @click="getName">异步获取Name</button>
      </div>
    </template>
      
    <script>
    export default {
        methods:{
          getName(){
            this.$store.dispatch('getName');  //异步老方法
          }
        }
    }
      
    </script>
    
    
    <style scoped>
    
    </style>
    App.vue App组件
    import Vue from 'vue'
    import Vuex from 'vuex'
    
    Vue.use(Vuex)   
    
    const moudleA = {
        state:{
            name:""
        },
        mutations:{
            getName(state,payload){
                state.name = payload     //这里获取(修改)名字
            }
        },
        actions:{
            getName(context){
                console.log(context);   //打印一下context看看即可
                setTimeout(() => {
                    context.commit("getName","BiHu")       //Commit提交给mutations
                }, 1000);//开始异步操作
            }
        }
    }
    
    const myVuex = new Vuex.Store({ 
        state:{
            name:"state中的字符串name"
        },
        modules:{
            a:moudleA
        } 
    });
    
    
    export default myVuex   //导出VUX对象
    index.js VUEX配置文件

    完、

    本文来自博客园,作者:咸瑜,转载请注明原文链接:https://www.cnblogs.com/bi-hu/p/15176365.html

  • 相关阅读:
    spring mvc技术
    转 easyUI的iframe子页面操作父页面元素
    DG
    SqlServer数据库分离附加操作
    SqlServer2008系统数据库的作用和特点
    Oracle基础学习记录1.0
    聚集索引与非聚集索引
    苹果官方 Crash文件分析方法 (iOS系统Crash文件分析方法)
    iOS Crash文件的解析
    在同一台电脑上使用两个github账户
  • 原文地址:https://www.cnblogs.com/bi-hu/p/15176365.html
Copyright © 2020-2023  润新知