• 02vuex-modules


    01===>
    module的理解:将一个大的系统进行拆分 拆分成若干个细的模块
    给个模块都有自己的 state  mutations  等属性
    这样可以在自己的小模块中进行修改 方便维护
    
    module的简单使用
    (1)创建main.js(首页)在store.js同级中  (2)store.js中引入  (3)modules的形式注册
    在store.js中写
    {
        // Vuex 仓库文件(入口)
        import Vue from 'vue'   import Vuex from 'vuex'   //全局注册Vue.use(Vuex)
    
        // 引入子模块(add)
        import shopcar from "./ShopCar"
        import main from "./main"
    
    
        // 创建一个状态厂库  并且将它暴露出去 export default
        const store=new Vuex.Store({
            modules:{
                // key:(模块名)  value(对应模块的配置)
                shopcar, //它相当于把shopcar.js暴露的那个对象放置在这里
                main
            }
        })
    
        // 取各个模块的值
        console.log(store.state.shopcar.name)  //这样可以拿到可拿到 购物出的的name值为   “我的值是购物车”
        console.log(store) //下面为输出的值
        /* 
        state: Object
        main: Object
        shopcar: Object
        */
        export default store
    }
    
    然后创建main.js(首页)
    {
        export default{
            state: {
            val: "主文件需要的值",
            name: "我的值是主文件"
            },
            mutations:{
    
            },
        }
    }
    02====》如何在商家页面Merchant.vue 获取到 modules模块中--shangjia.js中state的数据
    
    ps===>在main.js文件中  key值是不能够改名字的  value是引入进来的那个文件名
    key:vaulue相同的话可以简写
    
    main.js
    {
        //引入store实例
        import storeaa from "./store/store";
    
        new Vue({
        router,
        store: storeaa, //这里是key:value的形式  这里是不能够改变的哦  key 的固定的值是store  value的值可以跟引入的实例对象一致即可
        // 这这里注册store后,全局可以共享 store了
        render: h => h(App)
        }).$mount("#app");
    
    }
    
    store.js
    {
        import Vue from 'vue'    import Vuex from 'vuex'    Vue.use(Vuex)
    
        // 引入子模块 (千万别忘记了)
        import shopcar from "./ShopCar"
        import main from "./main"
        import shangjia from './shangjia'
    
        // 创建一个状态厂库  并且将它暴露出去 export default
        const store=new Vuex.Store({
            modules:{
                // key:(模块名)  value(对应模块的配置)
                shopcar, //它相当于把shopcar.js暴露的那个对象放置在这里
                main,
                shangjia
            }
    
        })
        export default store
    }
    
    shangjia.js  modules中管理商家模块的数据
    {
       export default {
            state:{
                val:"我是商家页面数据",
                name:"哈哈哈商家"
            } 
       }
    }
    
    Merchant.vue获取shangjia.js中state的数据
    {
      <template>
        <div>
            <p>{{ test }}</p>   
        </div>
     </template>
    
     export default {
      data(){
        return{
          test:"",
        }
      }, 
      
      created() {
        this.test=this.$store.state.shangjia.val;
         },
      }
     
    }
    03===》 利用computed:{}计算属性提高性能 例2不变  
    利用computed只要母体数据不发生改变  它就不会发生改变
    
    添加 Merchant.vue中
    {
      将值渲染出来
      <h2>为了提升性能 {{test1}}</h2>
    
    
      computed: {
        test1() {
          return this.$store.state.shangjia.name;  //返回 “哈哈哈商家”
        }
      },
    
    }
    04===>将所有的数据放在store.js的data中  
    两个页面的代码一模一样  A页面点击加1  B页面数字同样发生改变
    
    ps===>在利用modules模块来管理数据的时候  你需要在store.js  引入相应的子模块 如例2
    如果将所有的数据 都放在store.js 的data中饭就不需要  引入相应的子模块
    
    ps===> 只要你去修改state中的值 你就考虑写mutations 
     
    A.vue页面  B.vue页面  
    {
        <template>
        <div>
            <button @click="clickDec">-</button>
            <span>  {{ num }} </span>   
            <button @click="addNum">+</button>
        </div>
        </template>
    
        export default {
        data() {
            return {
            test: ""
            };
        },
        methods:{
            addNum(){
            // 提交一个mutations ,改变state中的值 相调用mutations中的addNum函数
               this.$store.commit("addNum")    
            },
    
            clickDec(){
              this.$store.commit("clickDec")    
            }
        },
    
        computed:{
            num(){
              return this.$store.state.num
            }
        },
     };
    }
    
    store.js
    {
        import Vue from 'vue'   import Vuex from 'vuex'     Vue.use(Vuex)
    
        // 创建一个状态厂库  并且将它暴露出去 export default
        const store=new Vuex.Store({
            state(){
            return{
                test:"我输测试数据",
                num:0
            } 
            },
    
            mutations:{
                addNum(state){
                        state.num++;
                },
                clickDec(state) {
                    state.num--;
                },
            }
    
        })
        export default store
    
    }
    5====》对例4进行优化    this.$store.commit("chang",1)    传参 判断出入的值正数还是负数  负数不能小于0
    
    A页面 B页面  简化了代码
    {
      <button @click="clickDec">-</button>
        <span>  {{ num }} </span>   
      <button @click="addNum">+</button>
       
    
      methods:{
        addNum(){
          // 提交一个mutations ,改变state中的值  用了第一种方式
          this.$store.commit("chang",1)    
        },
    
        clickDec(){ //如果小于0  不执行改函数
          if(this.$store.state.num==0){ //不能将这一条语句放在 最后 将没有意义
              return;
          }
          this.$store.commit("chang",-1)   
          // console.log(this.$store.state.num)
        }
      },
    }
    
    store.js 简化了
    {
      mutations: {
        chang(state, zhi) {
          state.num += zhi;
        }
      }
    }
  • 相关阅读:
    1093. Count PAT's (25)
    1092. To Buy or Not to Buy (20)
    机器学习实战——k-邻近算法:约会网站
    1057. Stack (30)
    1017. Queueing at Bank (25)
    strcpy、strncpy和memcpy的用法比较
    华为笔试题--蛇形矩阵
    对于内核执行过程的理解
    pom.xml格式问题
    Json反序列化遇到的问题
  • 原文地址:https://www.cnblogs.com/IwishIcould/p/11261512.html
Copyright © 2020-2023  润新知