vuex详细介绍与理解!

129 阅读2分钟

一.何为vuex

是专门为 Vue.js 应用程序开发的一种状态管理模式,它采用集中式存储管理应用的所有组件的状态,什么是状态管理模式,指的是把组件的共享状态抽取出来,以一个单例模式去进行管理。应用的场景有:单页面应用中,组件之间的数据状态管理,应用的实例有1.购物车2.登录状态记录,下单页面如果有选择优惠券的一个按钮,点击进入优惠券页面后,在选择商品后返回下单页面,数据会有一个绑定的状态,显示已选择使用过的优惠券.

vuex在vue框架的store文件下面, 有五种属性,分别为:有五种,分别是 State、 Getter、Mutation 、Action、 Module.

属性名作用/辅助函数/取值方式
State存储数据和状态( mapState 辅助函数)在计算属性computed里面进行取值
Getter就是store的计算属性,对state里面的状态进行过滤处理(mapGetters辅助函数)在计算属性computed里面进行取值
Mutation定义方法对store数据进行修改,mutation 必须是同步函数(mapMutations辅助函数),在methods里面取方法,需要同actions里面的异步触发才可以使用.
Action将mutations里面处理数据的方法变成可异步的处理数据的方法( mapActions  辅助函数),methods里面取方法.
Module将分成的模块的名称写入里面记得要先引入在填写

若想实现数据的持久化

[点击该链接:(www.npmjs.com/package/vue…)]

实现步骤:

1. npm i vuex-persistedstate先安装插件

2.引入 import createPersistedState from "vuex-persistedstate"

3.在modules下面填写此段代码

plugins: [
    createPersistedState({
      storage: window.localStorage, //该处可以是localStorage也可以是sessionStorage
    }),
  ],

二.示例模板

1.使用vuex实现简单的数据加加减减实现步骤如下:

export default {
  state: {
    num: 1,
  },
  getters: {},
  mutations: {
    // 加加
    addNum(state, val) {
      state.num++;
    },
    // 减减
    decNum(state, val) {
      if (state.num <= 0) {
        state.num = 0;
      } else {
        state.num--;
      }
    },
  },
  actions: {
    addNumAsync({ commit }, val) {
      commit("addNum", val);
    },
    decNumAsync({ commit }, val) {
      commit("decNum", val);
    },
  },
  namespaced: true,  //**切记要使用命名空间**
};

<template>
  <div>
    <p>{{num}}</p>
    <button @click="addFun">点击我数量加加</button>
    <button @click="decFun">点击我数量减减</button>
  </div>
</template>

<script>
// 使用辅助函数将值取出来
import { mapState, mapActions } from "vuex";
export default {
  computed: {
    // 取出来num模块里面的num值
    ...mapState("num", ["num"])
  },
  created() {
    console.log(this.num);
  },
  methods: {
    ...mapActions("num", ["addNumAsync"]),
    ...mapActions("num", ["decNumAsync"]),
    // 点击数量加加
    addFun() {
      this.addNumAsync();
    },
    // 点击数量减减
    decFun() {
      this.decNumAsync();
    }
  }
};
</script>

通过以上代码可以实现一个加加减减的小案例,如果要取得是某个模块里面的数据语法格式为...mapState("num", ["num"]),取方法也同理.

三.同步方法和异步方法之间的互相调用

1.如果在actions里面解构了就可以这样写:

QQ图片20221214163550.png

2.如果在actions里面没有解构了就可以这样写:

QQ图片20221214163901.png

3.异步调用另一个模块的异步和同步并且没有模块名

 1.异步调用同步
      commit("addFruits", val, { root: true });
 2.异步调用异步
       dispatch("addFruitsAction", val, { root: true });

4.异步调用另一个模块的异步和同步并且有模块名

 1.异步调用同步
      commit("user/getBbb", val, { root: true });
 2. 异步调用同异步
      dispatch("user/getAaa", val, { root: true });

以上是小编的简介,欢迎评论共同进步! 驻足阅读一番哦!