美文网首页VUEVueVue
Vuex常用知识点记录

Vuex常用知识点记录

作者: 一个前端程序员 | 来源:发表于2019-10-15 21:51 被阅读0次

一、为什么要使用Vuex

1、多个组件依赖同一个状态,使用组件之间通信方法会非常繁琐,例如多层嵌套组件。

2、需要全局保存的数据,例如用户、权限信息,全局系统设置

二、Vuex的五个核心属性

1、state:存储状态

// store.js
const store = new Vuex.Store({
  state: {
    count: 0
  }
});
// 组件里获取count值
$store.state.count

2、getters:state作为第一个参数,其他getters作第二个参数,返回值会根据他的依赖缓存起来,相当于Vue的计算属性

// store.js
const store = new Vuex.Store({
  state: {
    count: 1,
    sum: 2
  },
  getters: {
    getCountAndSum: (state,getters) => {
      return state.count + state.sum;
    }
  }
});
// 其他组件获取getter
$store.getters.getCountAndSum

3、mutations:修改状态(同步的),state 作为第一个参数,提交载荷作为第二个参数

const store = new Vuex.Store({
  state: {
    count: 1 
  },
  mutations: {
    increment (state, obj) {
      state.count += obj.n;
    }
  }
});
// 其他组件调用mutations的方法
$store.commit('increment', {n: 100});

4、actions:异步操作(执行mutations的方法,不是直变更状态)

const store = new Vuex.Store({
  state: {
    count: 1 
  },
  mutations: {
    increment (state, obj) {
      state.count += obj.n;
    }
  },
  actions: {
    increment (context) {
      context.commit('increment');
    }
  }
});
// 其他组件调用actions的方法
$store.dispatch('increment');

5、modules:store的子模块

const a = {
  state: {
    count: 0
  },
  getters: {
    getCount2 (state, getters, rootState) {
      return state.count + 2;
    }
  },
  mutations: {
    increment (state, getters, rootState) {
      state.count++;  
    }
  },
  actions: {
    increment (context) {
      // context.state.count;
      // context.rootState.count;
      context.commit('increment');
    }
  }
};
const b = {};
const store = new Vuex.Store({
  modules: {
     a,
     b
  }
});
// 其他组件调用 (获取state的变量需要加上引入的module的别名)
$store.state.a
$store.state.b

三、Vuex辅助函数

<template>
  <div class="about">
    <h1>count: <span>{{count}}</span></h1>
    <h1>getCount: <span>{{$store.getters.getCount}}</span></h1>
    <h1>sum: <span>{{sum}}</span></h1>
    <h1>getSum: <span>{{$store.getters.getSum}}</span></h1>
    <button @click="clickB">test
    </button>
  </div>
</template>
<script>
import {mapState, mapGetters, mapMutations, mapActions} from 'vuex'; 
export default {
  name: 'about',
  data () {
    return {
      count: 0,
      sum: 0
    }
  },
  computed: {
    ...mapState({
      count: state => state.count,
      countAlias: 'count',
      countPlusLocalState (state) {
        return state.count + this.localCount;
      }
    }),
    ...mapGetters([
      'getCount', 'getSum'
    ])
  },
  mounted () {
    this.count = this.$store.state.count;
    this.sum = this.$store.state.a.sum;

  },
  methods:{
    ...mapMutations(
      'add','addO'
    ),
    ...mapActions([
      'add','addO'
    ]),
    clickB () {
      this.$store.dispatch('add');
      this.$store.dispatch('addO');
    }
  }
}
</script>


相关文章

  • Vuex常用知识点记录

    一、为什么要使用Vuex 1、多个组件依赖同一个状态,使用组件之间通信方法会非常繁琐,例如多层嵌套组件。 2、需要...

  • 常用知识点记录

    ndk log打印: ndk-stack -sym $PROJECT_PATH/obj/local/armeabi...

  • Vuex 的学习过程记录

    Vuex 的学习记录 资料参考网址Vuex中文官网Vuex项目结构示例 -- 购物车Vuex 通俗版教程Nuxt....

  • iOS开发零碎知识点

    以下这篇文章纯属个人记录到自己的简书上,非本人积累,查看原文在此。 记录一些常用和不常用的iOS知识点,防止遗忘丢...

  • Vuex的一些知识点

    vuex的一些知识点 vuex是vue的状态管理工具通过安装 vuex是一个专为vue.js应用程序开发的状态管理...

  • vue组件之间的几种通讯方式

    1. props和$emit 最简单常用的方式 目录结构 效果图 2. vuex https://vuex.vue...

  • Vuex 教程

    默认,是学会了 Vue 的搭建,默认熟悉 Vuex 是什么,下面用代码介绍 Vuex 的知识点。 我要实现的功能是...

  • (四)getters 在获取到公共数据后操作

    本节知识点 利用getters直接在vuex中操作数据 使用指南 (1) 在vuex 文件中也就是store.js...

  • CoreAnimation学习笔记(一)

    这是关于系统学习CoreAnimation的学习笔记,记录常用和重要的知识点,gitbook地址:https://...

  • 读书笔记—torch中的热门知识点

    这里随机记录一些torch的常用知识点,比较随意,主要记录的是自己读书过程中发现的一些有意思的知识点。 1.@和*...

网友评论

    本文标题:Vuex常用知识点记录

    本文链接:https://www.haomeiwen.com/subject/srsemctx.html