Vuex 基本使用总结

使用Vuex之前我们需要先来了解一下 什么是 Vuex? 为什么要使用 Vuex?

先来看一下官方文档怎么解释

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

简单来讲呢 Vuex 就是一种公共的状态管理器,可以管理所有组件的状态。

我们知道 Vue 是单向数据流驱动模式,而当我们在大型项目实际开发中遇到 多个组件需要共享或更改一个状态时,通过原来的传参方式在复杂的组件嵌套中或者兄弟组件中就显得尤其麻烦,而使用 Vuex 就非常简单。

先来看一下官方文档提供的这张图

Vuex核心

State 是存储公共的状态,组件需要访问 state 数据时通过 this.$store.state.属性 进行访问, 修改了 state 页面会自动更新。
actions 是用来处理异步数据 (当 Vuex 中的数据需要通过异步获取时,就必须要在 actions 中进行配置)。
mutations 是用来修改 state 中的数据,注意 state 中的数据只能在 mutations 里面的每一个函数中,通过 默认传递的 state 参数进行修改。
getters 可以理解为是 store 的计算属性,getters 中的函数依赖于 state 中的属性,当 state 中的属性发生了改变就会触发 getters 里面的方法

使用之前需要先安装 Vuex

npm install vuex --save

在 src 目录下创建 store 目录,在 store 目录下创建 index.js

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex) //使用 vuex 插件

export default new Vuex.Store({

})

然后还要在入口文件 main.js 中进行导入并注册

import store from './store'

new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')

这样的话就可以在组件中使用 Vuex 了

如在组件中使用 state 中的数据

// 组件中
this.$store.state.isLogin  //获取 state 中定义的 isLogin

// store/index.js
  // 定义状态
    state: {
        isLogin: false
    },

与之对应的辅助函数写法 mapState

// 组件中引入 mapState
import {mapState} from "vuex"

// mapState 必须将数据映射到 computed 身上
 computed:{
      ...mapState(["属性名称"])    // 数组方式
      ...mapState({key:state=>state.属性})  // 对象形式
      }
      
// 使用时
this.属性名称

如在组件中使用 getters 获取 state 中的状态

// 组件中
this.$store.getters.方法名 
// store/index.js
getters: {
        方法名(state) {
            return state.xxx;
        }
    },

与之对应的辅助函数写法 mapGetters

// 组件中引入 mapGetters 
import {mapGetters} from "vuex"

// mapGetters 必须将数据映射到 computed 身上
computed:{
     ...mapGetters(["方法名称"])    // 数组方式
     ...mapGetters({key:方法名称})  // 对象形式
     }
   
// 使用时
this.方法名称

如在组件中调用 actions 中定义的方法

// 组件中
this.$store.dispatch("方法名", 传递参数);
 
// store/index.js
 actions: {
     方法名: ({commit}, 传递参数) => {
        //通过 commit 提交触发 mutation 中的方法 
        commit('mutatuon 中方法名', username)
        },
    },

与之对应的辅助函数写法 mapActions

// 组件中引入 mapActions 
import {mapActions} from "vuex"

// mapActions 必须将数据映射到 methods 身上
methods:{
      ...mapActions(["方法名称"])    // 数组方式
      ...mapActions({key:方法名称})  // 对象形式
     }
  
// 使用时
this.方法名称

如在组件中调用 mutations 的方法来修改状态

// 组件中
this.$store.commit('方法名', 传递参数);

// store/index.js
    mutations: {
        方法名(state, 接收参数) {
            // state 默认参数 
            state.xxx = 接收参数;
        }
    },

与之对应的辅助函数写法 mapMutations

// 组件中引入 mapMutations 
import {mapMutations} from "vuex"

// mapMutations 必须将数据映射到 methods 身上
methods:{
      ...mapMutations(["方法名称"])    // 数组方式
      ...mapMutations({key:方法名称})  // 对象形式
      }
      
// 使用时
this.方法名称

Vuex 本地持久化

当我们刷新页面时,项目会重新加载, vuex 会重置,我们所有的状态都会回到初始状态,而有时这是我们不想看到的,使用 vuex-persistedstate 可以避免这种情况

首先需要安装 vuex-persistedstate

npm install --save vuex-persistedstate

需要在 store 目录下 index.js 中进行配置一下

import createPersistedState from "vuex-persistedstate";

const store = new Vuex.Store({
  // 加上这句配置就能实现持久化,但是默认是把 satae 中的所有状态都进行了持久化 
  plugins: [createPersistedState()]
  
  // 如果只想让某一个状态进行持久化,可以按照下面来进行配置
   plugins: [createPersistedState({
    reducer(val){
      return{
        // 只存储 state 中的 city
        city:val.city
      }
    }
  })],
});

更多详情 请参考:Vuex 官方文档

ok,以上就是我个人对 Vuex 的一些基本用法的总结。谢谢观看。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容

  • Vuex是什么? Vuex 是一个专为 Vue.js应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件...
    萧玄辞阅读 3,070评论 0 6
  • vuex 场景重现:一个用户在注册页面注册了手机号码,跳转到登录页面也想拿到这个手机号码,你可以通过vue的组件化...
    sunny519111阅读 7,973评论 4 111
  • 配置 vuex 和 vuex 本地持久化 目录 vuex是什么 vuex 的五个核心概念State 定义状态(变量...
    稻草人_9ac7阅读 873评论 0 5
  • 安装 npm npm install vuex --save 在一个模块化的打包系统中,您必须显式地通过Vue.u...
    萧玄辞阅读 2,901评论 0 7
  • ### store 1. Vue 组件中获得 Vuex 状态 ```js //方式一 全局引入单例类 // 创建一...
    芸豆_6a86阅读 695评论 0 3