前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Vue状态管理(Vuex)

Vue状态管理(Vuex)

作者头像
用户7386338
发布2020-05-29 10:53:33
5620
发布2020-05-29 10:53:33
举报
文章被收录于专栏:Java患者

浅谈Vuex

Question:Vuex状态管理跟使用传统全局变量有什么不同之处呢?

Answer:

1.Vuex的状态存储是响应式的:就是当你的组件使用到了这个Vuex的状态,一旦它改变了,所有关联的组件都会自动更新相对应的数据,这样开发者省事很多。

2.不能直接修改Vuex的状态:如果是个全局对象变量,要修改很容易,但是在Vuex中不能这样做,想修改就得使用Vuex提供的唯一途径:显示地提交mutations来实现修改。这样做的好处就是方便我们跟踪每一个状态的变化,在开发过程中调试的时候,非常实用。

Question:Vuex有哪几种状态和属性?

1.State:用一个对象State包含了整个应用层级的所有状态,你可以理解为这些状态就是一堆全局变量和数据。

2.Mutations:修改仓库 store中的状态的唯一办法就是通过提交mutations

我们在 mutations中定义了一个叫increment的函数,函数体就是我们要进行更改的地方会接受 state作为第一个参数,第二个是自定义传参

我们在提交commit时候,字符串参数increment,就是对应在 mutations中的increment。一般通过方法或钩子触发,例如:

3.Getters:是store的计算属性,类似于computed,对state里的数据进行一些过滤,改造等等,假设我们要在state.count的基础上派生出一个新的状态newCount出来,就适合使用我们的 getters

在组件中获取{{newCount}}方式:this.$store.getters.newCount

4.Action:用来解决异步流程来改变state数据

Action 通过 store.dispatch 方法触发

如何运用vuex语法糖mapMutations??

此方法只能写在 methods里面,在其他地方调用即可...mapMutations(['add', 'reduce'])

如何运用辅助函数mapActions??

如何运用辅助函数mapState??

当一个组件需要获取多个状态时候,将这些状态都声明为计算属性会有些重复和冗余。为了解决这个问题,我们可以使用 mapState 辅助函数帮助我们生成计算属性,让你少按几次键

如何运用辅助函数mapGetters??

store.js代码

代码语言:javascript
复制
import Vue from "vue";
import Vuex from "vuex";

Vue.use(Vuex);

const store = new Vuex.Store({
  state: {
    storeSalaryList: [
      {
        name: "马云",
        salaryAmount: 1000
      },
      {
        name: "马化腾",
        salaryAmount: 900
      },
      {
        name: "李彦宏",
        salaryAmount: 800
      }
    ]
  },
  getters: {
    doubleSalaryList(state) {
      let newArr = state.storeSalaryList.map(item => {
        return {
          name: item.name,
          salaryAmount: item.salaryAmount * 2 + " " + "$"
        };
      });
      return newArr;
    },
    totalSalary(state) {
      let sum = 0;
      state.storeSalaryList.map(item => {
        sum += item.salaryAmount;
      });
      return sum * 2;
    }
  }
});
export default store;

组件中的代码

代码语言:javascript
复制
<template>
  <div id="salary-list-fisrt">
    <h2>财富榜</h2>
    <ol>
      <li v-for="(salary, index) in myDoubleSalaryGetter"
          :key="index">
        {{salary.name}}的工资是:{{salary.salaryAmount}}
      </li>
    </ol>
    <span>工资总额是:{{myTotalSalary}} $</span>
  </div>
</template>
<script>
import { mapGetters } from "vuex";
export default {
  name: "salary-list-first",
  computed: {
    ...mapGetters({
      myDoubleSalaryGetter: "doubleSalaryList",
      myTotalSalary: "totalSalary"
    })
  }
};
</script>
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java患者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档