当前位置: 首页 > article >正文

简单说明vuex

vuex

  • 知识结构
  • 配置
  • 调用

知识结构

vue用于管理公共数据的仓库

在这里插入图片描述

配置

  • state:所有公共数据的初始状态(初始值)

    export default {
      state: {
        count: 0,
      }
    };
    
  • mutations:修改state内容的方法(必须为同步方法)

    export default {
      state: {
        count: 0,
      },
      mutations: {
      	increase(state,payload){
      		state.count += payload;
      	}
      }
    };
    
  • actions:修改state内容的异步相关方法,也需要通过mutations中的方法进行最终修改

    export default {
      state: {
        count: 0,
      },
      mutations: {
      	increase(state,payload){
      		state.count += payload;
      	}
      },
      actions: {
      	asycIncrease(context,payload){
      		setTimeout(() => {
              context.commit('increase',10);
            }, 1000)
      	}
      }
    };
    
  • getters:仓库内的计算属性

    export default {
      state: {
        count: 0,
      },
      mutations: {
      	increase(state,payload){
      		state.count += payload;
      	}
      },
      actions: {
      	asycIncrease(context,payload){
      		setTimeout(() => {
              context.commit('increase',10);
            }, 1000)
      	}
      },
      getters: {
        power (state) {
          return state.count ** state.count;
        }
      }
    };
    
  • modules:在仓库内容过多时,避免命名重复或为了结构清晰,可以分为不同的module以此来区分

    // 在创建仓库时配置
    const store = createStore({
      modules: {
        a: moduleA,
        b: moduleB
      }
    })
    
  • 完整示例配置

    // store配置
    import Vuex from "vuex";
    import Vue from "vue";
    import count from "./count";
    import abc from "./abc";
    Vue.use(Vuex);
    
    const store = new Vuex.Store({
      modules: {
        count,
        abc,
      },
      strict: true, // 开启严格模式
    });
    
    
    export default store;
    
    // count module 配置
    export default {
      // namespaced: true, // 开启命名空间
      state: {
        count: 0,
      },
      mutations: {
      	increase(state,payload){
      		state.count += payload;
      	}
      },
      actions: {
      	asycIncrease(context,payload){
      		setTimeout(() => {
              context.commit('increase',10);
            }, 1000)
      	}
      },
      getters: {
        power (state) {
          return state.count ** state.count;
        }
      }
    };
    
    // abc module 配置
    export default {
      state: {
        abc: '',
      },
      mutations: {
      	set(state,payload){
      		state.abc = payload;
      	}
      },
      actions: {
      	asycIncrease(context,payload){
      		setTimeout(() => {
              // 最终还是使用的commit
              context.commit('set',"well");
            }, 1000)
      	}
      }
    };
    
  • strict: true,开启严格模式

    规定state中的状态只能通过mutations中的方法改变,但是其实也可以直接使用this.$store.state.count = 1这种改变状态,开启严格模式后使用直接赋值时就会报错

  • namespaced: true,开启命名空间

    当不同module中有同名的方法时,直接commit就容易混乱,打开命名空间后,调用方法就必须加上此module名作为前缀,如下:

    import Vue from "vue";
    import store from "./store";
    
    const num = store.getters["count/power"];
    

调用

  • commit

    用于调用mutations中的方法

    <template>
      <div>
        <div id="button">
          <button @click="handleClick">button</button>
        </div>
      </div>
    </template>
    
    <script>
    import Vue from "vue";
    import store from "./store";
    export default {
      methods: {
        handleClick(){
        	store.commit("count/increase",1);
        }
      },
    };
    </script>
    
  • dispatch

    用于调用异步方法

    <template>
      <div>
        <div id="button">
          <button @click="handleClick">button</button>
        </div>
      </div>
    </template>
    
    <script>
    import Vue from "vue";
    import store from "./store";
    export default {
      methods: {
        handleClick(){
        	store.dispatch("count/asycIncrease",2);
        }
      },
    };
    </script>
    
  • mapState:用于让我们方便的使用计算属性封装state,有多种写法

    import { mapState } from 'vuex'
    
    export default {
      computed: mapState({
        count: state => state.count,
      })
    }
    
    export default {
      computed: {
          count: ...mapState("count", ["count"]);
      }
    }
    
  • mapGetters:将 store 中的 getter 映射到局部计算属性,这种map函数几乎都是这样的作用

    import { mapGetters } from 'vuex'
    
    export default {
      computed: {
      // 使用对象展开运算符将 getter 混入 computed 对象中
        ...mapGetters('count',[
          'power'
        ])
      }
    }
    
  • mapMutations:简化函数封装

    import { mapMutations } from 'vuex'
    
    export default {
      // ...
      methods: {
        ...mapMutations('count',[
          'increase', // 将 `this.increase()` 映射为 `this.$store.commit('increase')`
        ]),
      }
    }
    
  • mapActions:简化异步方法封装

    import { mapActions } from 'vuex'
    
    export default {
      methods: {
        ...mapActions('count',[
          'asycIncrease', // 将 `this.asycIncrease()` 映射为 `this.$store.dispatch('asycIncrease')`
        })
      }
    }
    

http://www.kler.cn/a/380226.html

相关文章:

  • 算法简介:K最近邻算法
  • 使用wordcloud与jieba库制作词云图
  • 时间序列预测(十八)——实现配置管理和扩展命令行参数解析器
  • Oceanbase学习之一迁移mysql数据到oceanbase
  • 【react使用AES对称加密的实现】
  • leetcode71:简化路径
  • AIDOVECL数据集:包含超过15000张AI生成的车辆图像数据集,目的解决旨在解决眼水平分类和定位问题。
  • SwiftUI:单个App支持设置多语言
  • 【零基础学习CAPL】——使用CAP测试报文长度DLC
  • 交换机的基本配置
  • MySql创建用户与授权
  • 关于安科瑞电能质量监测和治理产品在分布式光伏电站的应用探讨
  • 又一次安装autoware.universe的过程
  • 苏州金龙新V系客车创新引领旅游出行未来
  • 计算机网络面试题三道之二
  • 【人工智能】自动化机器学习的实现:使用Python与AutoML工具进行模型自动化调参
  • 提升大数据量分页查询性能:深分页优化全解
  • 深度学习基础知识-残差网络ResNet
  • Python 实现图:构建、添加和搜索详解
  • 【客户服务】服务创造价值---让服务成为客户购买的理由
  • 微服务架构面试内容整理-领域驱动设计(DDD)
  • 使用 SSH 蜜罐提升安全性和记录攻击活动
  • 2024Python安装与配置IDE汉化集活的全套教程
  • 安科瑞出席2024年浙江省建筑电气学术年会
  • 2024年11月4日Github流行趋势
  • cJSON使用说明