Vuex的使用及map方法

1|0Vuex

  • 概念:在Vue中实现集中式状态(数据)管理的一个Vue插件,对vue应用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于任意组件间的通信

  • 使用场景:多个组件需要共享数据

  • 搭建Vuex环境

    • 创建文件:src/store/index.js
      // 该文件用于创建Vuex中最为核心的store // 引入Vuex import Vue from 'vue' // 引入Vuex插件 import Vuex from "vuex" Vue.use(Vuex) // 准备actions--用于响应组件的动作 const actions = {} // 准备mutations--用于操作数据(state) const mutations = {} // 准备state--用于存储数据 const state = {} const store = new Vuex.Store({ actions, mutations, state, }) export default store;
    • 在main.js中创建vm时传入store配置项
      // 引入创建的store import store from "./store" new Vue({ el: '#app', render: h=>h(App), // 使用store store, ... })
  • 具体使用

    • 组件使用
      methods: { add() { this.$store.dispatch("add", params); }, ... }
    • src/store/index.js配置
      // 准备actions--用于响应组件的动作 const actions = { add(context, value) { context.commiit("ADD", value); }, ... } // 准备mutations--用于操作数据(state) const mutations = { ADD(state, value) { state.sum += value; }, ... } // 准备state--用于存储数据 const state = { sum: 0, ... }

2|0getters的使用

  • 概念:当state中的数据需要经过加工后在使用时,可以使用getters加工

  • 在store/index.js中追加getters配置

    ... // 准备getters--用于将state中的数据进行加工 const getters = { change(state){ return state.sum*10 }, } const store = new Vuex.Store({ ... getters, })
  • 组件中读取数据

    $store.getters.change

3|0组件中四个map方法的使用

  • mapState方法:用于帮助我们映射state中的数据为计算属性
    computed: { // 通过mapState生成以上计算属性从state中读取数据(对象方式) ...mapState({sum2:'sum'}), // 通过mapState生成以上计算属性从state中读取数据(数组方式),要求计算属性名称和state中读取的属性名一致 ...mapState(['sum']), }
  • mapGetters方法:用于帮助我们映射getters中的数据为自定义方法
    methods: { // 通过mapGetters生成以上自定义方法从getters中读取数据(对象方式) ...mapGetters({change:'change'}), // 通过mapGetters生成以上自定义方法从getters中读取数据(数组方式),要求自定义方法和getters中读取的方法名称一致 ...mapGetters([change]), }
  • mapActions方法:用于帮助我们生成与actions对话的方法,即:包含$store.dispatch(xxx)的函数
    methods: { // 通过maActions生成incrementOdd,incrementWait(对象方式):如果需要传递参数,则在点击调用时传递参数即可采用以下方式 ...mapActions({incrementOdd: 'addOdd', incrementWait: 'addWait'}), // 通过mapActions生成incrementOdd,incrementWait(数组方式):如果需要传递参数,则在点击调用时传递参数即可采用以下方式, // 要求计算属性名称和actions方法名一致 // ...mapActions(['addOdd', 'addWait']), }
  • mapMutations方法:用于帮助我们生成与mutations对话的方法,即:包含$store.commit(xxx)的函数
    methods: { // 通过mapMutations生成increment,decrement(对象方式):如果需要传递参数,则在点击调用时传递参数即可采用以下方式 ...mapMutations({increment: 'ADD', decrement: 'SUB'}), // 通过mapMutations生成increment,decrement(数组方式):如果需要传递参数,则在点击调用时传递参数即可采用以下方式, // 要求计算属性名称和mutations方法名一致 // ...mapMutations(['ADD', 'SUB']), }

4|0模块化+命名空间

  • 目的:让代码更好的维护,让多种数据分类更加明确。

  • 修改store.js

    const CountOptions { // 命名空间为true,组件即可使用该配置 namespaced: true, actions: {...}, mutations: {...}, state: {...}, getters: {...}, } const PersonOptions { // 命名空间为true,组件即可使用该配置 namespaced: true, actions: {...}, mutations: {...}, state: {...}, getters: {...}, } const store = new Vuex.Store({ modules: { // 模块化编程,引入模块配置(组件配置) CountAbout: CountOptions, PersonAbout: PersonOptions, } })
  • 开启命名空间后,组件中读取state数据:

    // 方式一:自己直接读取 this.$store.state.PersonAbout.xxx; // 方式二:借助mapState读取 ...mapState('CountAbout',{sum:'sum', sum2:'sum'});
  • 开启命名空间后,组件中读取getters数据:

    // 方式一:自己直接读取 this.$store.getters['PersonAbout/xxx']; // 方式二:借助mapGetters读取 ...mapGetters('CountAbout',{xxx:'xxx'});
  • 开启命名空间后,组件中调用dispatch:

    // 方式一:自己直接调用dispatch this.$store.dispatch('CountAbout/xxx', params); // 方式二:借助mapActions读取 ...mapActions('CountAbout',{xxx:'xxx'});
  • 开启命名空间后,组件中调用commit:

    // 方式一:自己直接调用commit this.$store.commit('CountAbout/xxx', params); // 方式二:借助mapMutations读取 ...mapMutations('CountAbout',{xxx:'xxx'});

__EOF__

本文作者xsha_h
本文链接https://www.cnblogs.com/aitiknowledge/p/15930155.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   xsha_h  阅读(749)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示