• Vuex之...mapGetters(["变量名"]) 实践体会


     ...mapGetters(["变量名"])  是属于Vuex原生的知识,所以如有要学习知道所以然, 入口是 Vuex官网  Vuex API

    话说回来, 如果自己摸索, 为知道了入口在哪里, 也是要花费精力和时间的. 所以找对入口, 就可以保证方向是对的.

    参考  vuex中mapGetters的使用及简单实现原理

    1). 属于vuex知识体系范畴

    2). getters是vuex中的特殊表达部分。于是,需要知道,vuex的getters是什么?  参考

    3). 若有多个getter时,可用...mapGetters([ ]),需要先export引入,且是es6语法,需要安装bable插件,这样写可以简化代码.  参考

    4). 怎样理解: 由于getters已经通过computed挂载到当前实例,所以代码中不需要再通过this.$store.getters的方法去访问

    体会1: 充满了各种约定, 所以看官方的API是必须的

    体会2: getter.js 是Vuex取值的总入口

    体会3: 在new Vue对象时,传入Vuex对象, 引用名通常为store, 之后在vue组件中,就可以全局访问了,如this.$store.dispatch("setNumber", 10)

    体会4: 执行Vuex的dispathch(参数1, 参数2)方法,会寻找action中对应的方法,这里对应book.js中的

    体会5: Vue中可以使用ES语法,包括ES6

    体会6: 不错地学习ES语法例子

    在组件的computed属性中...mapGetters(["number"]) 代码的作用
    为组件创建computed(计算属性),并返回 getter 中对应的返回值, 即在组件中引入mapGetters就是将vuex中的数据映射到组件的计算属性当中
    这里为HelloWorld.vue创建计算属性number,number的值取之getters.js中对于的number, 所以之后问题及就是怎样设计getters.js

     HelloWord.vue 

    9-23: 仅仅为了演示ES6新增语法, ... 对象展开运费符

    33: 属于Vuex原生的语法,通过引入mapGetters可以轻松的取到vuex中存储的数据,并在此vue页面中构建成计算属性并返回getter的返回值,至于怎么用,为什么是这样,是官网中原生预定义的

    34: 演示ES6新增语法 ...称:对象展开运算符,

    37-39: 调用book.js中的actions中的setNumber,所以掌握actions下function怎样设计

    37: 为什么$store可以访问? 即在main.js new Vue 时传入的,可以理解为Vue原生的语法, 所以如果要掌握coding,需要查看下Vuex的API

     1 <template>
     2   <div class="hello">
     3     <h1>{{ msg }}</h1>
     4   </div>
     5 </template>
     6 
     7 <script>
     8 import { mapGetters } from "vuex";
     9 const getters = {
    10   a: () => 1,
    11   b: () => 2,
    12   c: () => 3
    13 };
    14 
    15 function fn(keys) {
    16   const data = {};
    17   keys.forEach(key => {
    18     if (getters.hasOwnProperty(key)) {
    19       data[key] = getters[key];
    20     }
    21   });
    22   return data;
    23 }
    24 
    25 export default {
    26   name: "HelloWorld",
    27   data() {
    28     return {
    29       msg: "Welcome to Your Vue.js App"
    30     };
    31   },
    32   computed: {
    33     ...mapGetters(["number"]), 
    34     ...fn(["a", "b", "c"])
    35   },
    36   mounted() {
    37     this.$store.dispatch("setNumber", 10).then(() => {
    38       console.log(this.number);
    39     });
    40     console.log(this.a, this.b, this.c);
    41   }
    42 };
    43 </script>

      main.js 

    //引入状态管理模块
    import store from './store';
    
    new Vue({
      el: '#app',
      router,
      store,//为Vue增加vuex状态管理
      components: { App },
      template: '<App/>'
    })

     srcstoreindex.js 

    提示:如Vuex没有安装,需要安装 npm install --save vuex
    import book from './modules/book';
    import getters from './getters';
    Vue.use(Vuex);
    
    const store = new Vuex.Store({
      modules:{
        book
      },
      getters
    })
    
    export default store

     srcstoregetters.js 

    const getters = {
        number: state => state.book.number  //默认行为:对应book.js中state属性
    }
    export default getters

     srcstoremodulesook.js  

    const book = {
      state: {
        number: 1
      },
      mutations: {
        SET_NUMBER: (state, number) => {
          state.number = number
        }
      },
      actions: {
        setNumber: ({
          commit,
          state
        }, number) => {
          // console.log(state.number, number)
          return commit('SET_NUMBER', number)
        }
      }
    }
    
    export default book

    其它例子

    <el-form-item label="工作地点" prop="City">
      <el-cascader :options="$store.getters.city_item" :props="optionProps" placeholder="请选工作地点"
                   v-model="formData.City" :show-all-levels="false" filterable>
      </el-cascader>
    </el-form-item>

    读作到Vuex状态管理工具,加载以city_item引用数据,$store是在模板标签的属性值,至于$store为什么可以全局访问,是在main.js new Vue时被挂载的;getters对应Vuex的getters.js, 它在new Vuex.Store时被加载; city_item是自定义变量,定义在getters.js中

    Vuex取"值"模式:定义getters.js 模块
    Vuex存"值"模式:定义一个js文件,在new View.Store时作为modules参数, modules对应的js文件约定3个属性: 1).state; 2).mutations; 3).actions, 参考book.js

  • 相关阅读:
    码云非活跃帐号处理规范
    css 利用animation和transform 设置鸭子表
    css 背景图片
    css 利用transform 实现页面居中效果
    css 表格
    利用雪碧图,完成兔子走路过渡/动画效果
    Apache 2.0.50,+php5.1.2+mysql 5.1 安装手记
    PHP企业级应用之WebService篇(转)
    发个C语言连接Postgresql程序(转)
    array 和 xml 相互转换
  • 原文地址:https://www.cnblogs.com/zhuji/p/13265550.html
Copyright © 2020-2023  润新知