首页 > 其他分享 >vuex共享数据仓库的模块化使用

vuex共享数据仓库的模块化使用

时间:2022-12-15 11:33:12浏览次数:49  
标签:schoolAbout ... 模块化 数据仓库 state num vuex store

一:概念:  vuex是使用vue中必不可少的一部分,基于父子、兄弟组件,我们传值可能会很方便,但是如果是没有关联的组件之间要使用同一组数据,就显得很无能为力,那么vuex就很好的解决了我们这种问题,它相当于一个公共仓库,保存着所有组件都能共用的数据。   二:vuex五大组成部分

1、state: vuex的基本数据,用来存储变量;(数据存储)


2、getters:从基本数据((state)派生的数据,相当于state的计算属性;


3、 mutations:提交更新数据的方法,必须是同步的(如果需要异步使用action)。每个mution都有一个字符串的事件类型(type)和一个回调函数(handler)。回调函数就是我们实际进行状态更改的地方,并且它会接受 state作为第一个参数,提交载荷作为第二个参数。(更改 state 中状态的逻辑同步操作)
commit-提交


4、action:和 mutations 的功能大致相同
①action提交的是mution.而不是直接变更状态,
②action可以包含任意异步操作。(提交mutation异步操作)
dispatch-调度


5、 modules:模块化vuex,可以让每一个模块拥有自己的state、 mutation、 action、getters,使得结构非常清晰,方便管理。(模块化)
1.现在store文件夹中定义好vuex模块js文件,并导出内容
注意:导出时设置 namespaced: true 的方式使其成为带命名空间的模块。保证在变量名一样的时候,添加一个父级名拼接。
2.在index.js文件中的先引入vuex模块
3.在index.js文件中的modules:{ }使用
4.最后进入到vue文件中使用,在methods中定义方法调用

  三:具体的使用方法 =================================在store/index.js文件中编写========================================= import Vue from 'vue' import Vuex from 'vuex'
Vue.use(Vuex)   //school模块部分
const school = {   namespaced: true,   state: {     val: 1,     num: 0,   },   getters: {     bignum(state) {       return state.num * 10     }   },   mutations: {     add() {       console.log("add");       this.state.schoolAbout.num += this.state.schoolAbout.val;     },     pop() {       console.log("pop");       this.state.schoolAbout.num -= this.state.schoolAbout.val;     },     odd() {       console.log("odd");       if (this.state.schoolAbout.num % 2) {         this.state.schoolAbout.num += this.state.schoolAbout.val;       }     },     eve() {       console.log("eve");       if (!(this.state.schoolAbout.num % 2)) {         this.state.schoolAbout.num += this.state.schoolAbout.val;       }     },
  },   actions: {
  }, } //人员模块的部分
const preson = {   namespaced: true,   state: {     lists: [       { id: 1, name: "张三" },       { id: 2, name: "王五" },       { id: 3, name: "李四" },     ],   },   getters: {
  },   mutations: {     addpreson() {       console.log(this);       console.log("addpreson");       var newpreson = { id: 4, name: "李白" }       this.state.presonAbout.lists.push(newpreson)     }   },   actions: {
  }, }
export default new Vuex.Store({   modules: {     schoolAbout: school,     presonAbout: preson   } })
// 小结:vuex模块化使用注意事项:(在store/index.js中) // 1.开启命名空间 namespaced: true -- 方便在组建中使用 // 2.为每个模块命名,注意$store中state结构发生变化,原来所有的数据放在一起,现在不同模块的的数据分开放 // 3.由于数据结构的变化,所以在getters,mutations,actions使用数据时要加上模块名称     ==============================以下实在具体的组件中使用vuex中的数据========================== ======school组件======== <template>   <div class="school">     <h2>运结果为:{{ num }}---在乘以10后:{{ bignum }}</h2>     <select name="number" id="selt" v-model.number="val">       <option value="1">1</option>       <option value="2">2</option>       <option value="3">3</option>     </select>     <button @click="add">+</button>     <button @click="pop">-</button>     <button @click="odd">奇数时加</button>     <button @click="eve">偶数时加</button>     <h4 style="color: #f33">人员列表总人数:{{ lists.length }}</h4>   </div> </template>
<script> import { mapState, mapGetters, mapMutations } from "vuex"; //映射方法 export default {   data() {     return {};   },   computed: {  //=========  vuex中四个映射方法的使用,进行简便操作  ========     // 1.mapState方法:用于帮助我们映射state中的数据为计算属性     // 来使用mapstate的好处就是,无需在{{}}中写的过于复杂 $store.state.num     // 注意点:对象中使用...将对象进行展开     ...mapState("schoolAbout", ["val", "num"]),     ...mapState("presonAbout", ["lists"]),
    // 2.mapGetters方法:用于帮助我们映射getters中的数据为计算属性     ...mapGetters("schoolAbout", ["bignum"]), //mapGetters的数组写法   },   methods: {     //#region     // 程序员人为的写法,自已调用$store.commit()方法     // add() {     //   this.$store.commit("add");     // },     // pop() {     //   this.$store.commit("pop");     // },     // odd() {     //   this.$store.commit("odd");     // },     // eve() {     //   this.$store.commit("eve");     // },     //#endregion
    // 3.mapActions方法:用于帮助我们生成与actions对话的方法,即:包含$store.dispatch(xxx)的函数     ...mapMutations("schoolAbout", ["add", "pop", "odd", "eve"]),
    // 4.mapMutations方法:用于帮助我们生成与mutations对话的方法,即:包含|$store.commit(xxx)的函数     // =====小结四种map方法:1,2写在计算属性中,3,4写在方法中,都需要使用...进行展开     //           他们都有两种写法,对象形式和数组形式,如果是采用模块化写法,要加上具体对应名称。   }, }; </script>
<style scoped> button {   margin: 0px 5px; } </style>   ==========preson组件========= <template>   <div class="box">     <h3 style="color: #f33">数字求和结果:{{ num }}</h3>     <button @click="addpreson">添加工作人员</button>     <h4 v-for="(item, id) in lists" :key="id">{{ item.name }}</h4>   </div> </template>
<script> import { mapState, mapMutations } from "vuex"; //映射方法 export default {   data() {     return {};   },   computed: {     ...mapState("schoolAbout", ["val", "num"]),     ...mapState("presonAbout", ["lists"]),   },   methods: {     ...mapMutations("presonAbout", ["addpreson"]),   }, }; </script>
<style scoped> h4 {   color: rgb(241, 191, 124); } </style>  

标签:schoolAbout,...,模块化,数据仓库,state,num,vuex,store
From: https://www.cnblogs.com/wyl-1113/p/16981740.html

相关文章

  • ES6——模块化
    模块化模块化是指将一个大的程序文件,拆分成许多小的文件,然后将小文件组合起来。一、浏览器使用ES6模块化方式一使用script标签,将type属性设置为module,然后在s......
  • Vuex 详解
    state:import{Module,VuexModule}from'vuex-module-decorators'@ModuleexportdefaultclassVehicleextendsVuexModule{wheels=2}等同于下面的代......
  • vuex的使用-简单存储
    在写新项目的时候,用input写了个搜索框,搜索之后获取到点击的数据,要将数据在tab中渲染出来,我思前想后,还是觉得vuex是最好的解决办法,记录一下vuex的基本用法首先是在store文......
  • Vuex极速入门
    01、什么是Vuex?1.1、为什么需要状态管理?在复杂的系统中,我们会把系统按照业务逻辑拆分为多个层次、多个模块,采用组件式的开发方式。而此时不同模块、父子模块之间的通信......
  • #yyds干货盘点#聊聊vuex的Mutations和Actions
    首先讲讲版本问题,如果使用​​vue-cli2​​模版搭建的基础项目,注意,如果使用​​vue​​版本是2,当你你默认安装​​vuex​​肯定是​​4.x​​版本了,这里需要注意的是,你要降......
  • 第一节:项目结构介绍、Vuex的应用、axios封装思路、菜单权限、按钮权限剖析
    一.        二.        三.         !作       者:Yaopengfei(姚鹏飞)博客地址:http://www.cnblog......
  • 如何从0到1搭建数据仓库?轻量级数据分析必备
    大数据时代对于数据分析、数据营销的要求越来越迫切,无论是对外的业务系统,还是对内的系统,业务人员都希望以数据为支撑,进行产品策略制定支撑、用户运营打法制定。使用数据库......
  • 大数据时代,数据仓库究竟是干嘛的?
    前言无论你是否专门从事大数据开发,作为一个开发人员,应该都听说过数据仓库的概念,那你知道为什么会出现数据仓库?数据仓库究竟是干嘛的吗?有什么价值和意义呢?那么本文就带到入......
  • Flink 作为现代数据仓库的统一引擎:Hive 集成生产就绪!
    Flink一直遵循“流优先,批是流的一个特例”的思想理念。在这一思想的指导下,Flink将最先进的流式处理技术运用到批处理中,使得Flink的批处理能力一早就令人印象深刻。特别......
  • 第十三章:vuex状态(数据)管理
    第十三章:vuex状态(数据)管理一、VueximporteventbusVue.proptotype.enventBus=eventBus全局事件总线。组件之间的通信:props属性自定义事件总线传值eventBus插槽传值......