Vue实战之Vuex状态管理

简介

Vuex 是一个专为 Vue.js 应用开发的 状态管理模式 , 它可以集中管理应用所有组件的状态

使用
  • 安装vuex npm install vuex --save
  • 创建 store
import Vue from 'vue'

import Vuex from 'vuex'

Vue.use(Vuex)

const state = {
  // 用户信息,初始值从本地 localStorage 获取
  user: ls.getItem('user')
}

const mutations = {
  UPDATE_USER(state, user) {
    // 改变 user 的值
    state.user = user
    // 将改变后的值存入 localStorage
    ls.setItem('user', user)
  }
}
上面的 UPDATE_USER 是事件类型名称,大写不是必须的,后期可以使用常量代替事件类型。参数 state 是当前仓库的 state,user 是用户传入的参数,多参数的时候应该使用一个对象

const actions = {
  login({ commit }, user) {
    // 登录时有传用户信息,就更新下用户信息
    if (user) commit('UPDATE_USER', user)
    // 跳转到首页
    router.push('/')
  }
}
action 的第一个参数是一个与仓库实例具有相同方法和属性的 context 对象,可以从 context.state 访问仓库的 state,使用 context.commit 提交一个事件类型。可以在第一个参数使用参数解构来简化代码,如 { commit }。

不使用参数解构的 actions:

const actions = {
  login(context, user) {
    if (user) context.commit('UPDATE_USER', user)
    router.push('/')
  }
}

const store = new Vuex.Store({
  state,
  mutations,
  actions
})
我们使用 new Vuex.Store 创建了一个新的 store(仓库)实例,其配置项说明:

state:共享的状态,我们不能直接更改状态,但是可以像 store.state.user 这样访问一个状态;
mutations:更改状态的方法,我们可以在这里更改状态,调用方法是像 store.commit('UPDATE_USER', user) 这样提交一个事件类型,这里不能包含异步操作;
actions:类似于 mutations,但我们不在这里直接更改状态,而是提交前面的 mutation,调用方法是像 store.dispatch('login') 这样分发一个事件,这里可以包含异步操作;
  • 入口js文件引入 store 并注入 store
组件内怎么访问 store

我们通过 store 选项,将仓库实例注入到每一个子组件中,这样子组件就能通过 this.$store 访问仓库

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值