vuex 使用说明

安装、使用vuex

vue.js 2.0 开发环境下安装vuex:

yarn add vuex --save

在项目src目录下新增一个store文件夹,在该文件夹内新建index.js文件和modules文件夹。目录结构如下:
在这里插入图片描述

文件说明:

  1. mutations-type.js:定义所有的mutations名称
export const APP_SET_TITLE = 'APP_SET_TITLE'
export const USER_SET_TOKEN = 'USER_SET_TOKEN'
  1. app.js: app范围的状态管理
import {APP_SET_TITLE} from './mutations-type'

const app = {
  namespaced: true,
  state: {
    title: 'vuex-test'
  },
  getters: {
    title: state => state.title
  },
  mutations: {
    [APP_SET_TITLE]: (state, title) => {
      state.title = title
    }
  },
  actions: {
    setAppTitle ({commit}, title) {
      commit(APP_SET_TITLE, title)
    }
  }
}

export default app
  1. user.js: user范围的状态管理
import {USER_SET_TOKEN} from './mutations-type'

const user = {
  namespaced: true,
  state: {
    token: ''
  },
  getters: {
    token: state => state.token
  },
  mutations: {
    [USER_SET_TOKEN]: (state, token) => {
      state.token = token
    }
  },
  actions: {
    setUserToken ({commit}, token) {
      commit(USER_SET_TOKEN, token)
    }
  }
}

export default user
  1. index.js: 导出每个范围状态管理
import app from './app'
import user from './user'

export default {app, user}
  1. store/index.js
import Vue from 'vue'
import Vuex from 'vuex'
import modules from './modeules'

Vue.use(Vuex)

const store = new Vuex.Store({
  modules
})

export default store

将store挂载到当前项目的Vue实例当中

main.js

import Vue from 'vue'
import App from './App'
import router from './router'
import store from '@/store'

Vue.config.productionTip = false

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  store,
  components: { App },
  template: '<App/>'
})

在vue组件中使用vuex

方式一:

...
<p>{{title}}</p>
<p>{{token}}</p>
...
<script>
import { createNamespacedHelpers } from 'vuex'

const { mapGetters: mapGettersApp } = createNamespacedHelpers('app')
const { mapGetters: mapGettersUser, mapActions: mapActionsUser } = createNamespacedHelpers('user')
...
computed: {
   ...mapGettersApp(['title']),
   ...mapGettersUser(['token'])
},
methods: {
  ...mapActionsUser(['setUserToken']),
  setToken () {
    const token = 'xcvdfbndbskbfdsbd3425jbjw235'
    this.setUserToken(token)
  }
}
...
</script>

方式二:

...
<p>{{title}}</p>
<p>{{token}}</p>
...
<script>
import {mapGetters} from 'vuex'
...
computed: {
  ...mapGetters('app', ['title']),
  ...mapGetters('user', ['token'])
},
methods: {
  ...mapActions('user', ['setUserToken']),
  setToken () {
    const token = 'xcvdfbndbskbfdsbd3425jbjw235'
    this.setUserToken(token)
  }
}
...
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值