详解vue之vuex

vuex存在的目的

由于vue为单页面应用,其组件之间的数据传递如果单单依赖storage,很容易出现数据被覆盖,被串改的情况发生,vuex正是为解决这个问题而生,提供一个空间供所有的组件读写。

1.安装vuex

npm i vuex --s

2.基本代码

然后在入口文件main.js输入一下代码

// main.js
import store from './store'

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

此时我们需要去增加一个文件夹store,在里面新建文件——mutations.js、mutation-types.js、getters.js、actionos.js 、 index.js、state.js 共六个文件。代码如下:

// mutations.js
import * as types from './mutation-types'

const mutations = {
  [types.SET_USER_ID](state, userId) {
    state.userId = userId
  },
  [types.SET_HUIYUAN](state, flag) {
    state.huiyuan = flag
  },
}

export default mutations
// mutation-types.js
export const SET_USER_ID = 'SET_USER_ID'
export const SET_HUIYUAN = 'SET_HUIYUAN'
// getters.js
export const userId = state => state.userId
export const huiyuan = state => state.huiyuan
// actions.js
import * as types from './mutation-types'

export const setInformation = function ({commit, state}, {information}) {
    commit(types.SET_USER_ID, information)
    commit(types.SET_HUIYUAN, true)
}
// index.js
import Vue from 'vue'
import Vuex from 'vuex'
import * as actions from './actions'
import * as getters from './getters'
import state from './state'
import mutations from './mutations'
import createLogger from 'vuex/dist/logger'

Vue.use(Vuex)

const debug = process.env.NODE_ENV !== 'production'

export default new Vuex.Store({
  actions,
  getters,
  state,
  mutations,
  strict: debug,
  plugins: debug ? [createLogger()] : []
})
//state.js
const state = {
  userId: '',
  huiyuan: false
}

export default state

其中actions.js是对mutation-types的内部元素的组合封装,看需求使用。

3.vuex实例

本文先不引用actions来存储一个userId,在需要存储的组件内部加入下面代码

// home.vue
import {mapMutations} from 'vuex'
methods: {
    // 这个在methods的最后引用
    ...mapMutations({
     setUserId:'SET_USER_ID'
   })
}

然后你便可以在其他地方,如生命周期内或者某个方法里直接输入this.setUserId('nihao') 便可设置userId为‘nihao’
然后在获取数据的组件内部加入如下代码:

// me.vue
import {mapGetters} from 'vuex'
computed: {
  ...mapGetters([
    'userId'
  ])
}

在data()后加入计算钩子computed获取userId,这个userId就如同存在于data中一样,可以this.userId引用,也可以引用到html中去。
下面是我的例子me.vue的完整代码

<template>
    <div class="" v-html="userId">
    </div>
</template>
<script>
    import {mapGetters, mapMutations} from 'vuex'
export default {
    computed: {
    ...mapGetters([
      'userId'
    ])
  },
  data () {
    return {
    }
  },
  created() {
  },
  methods: {
  }
}
</script>
<style>

</style>

效果如下:

这里写图片描述


4.vuex之action实例

接下来讲述如何使用actions.
我们事先在actions中定义了两个元素,一个是userId 为information(即传入的参数),另一个是huiyuan(会员)为 true。
在需要使用到setInformation 的组件中加入如下代码

import {mapActions} from 'vuex'
methods: {
  ...mapActions([
    'setInformation',
  ])
},

注意,…mapActions与…mapMutations的用法差不多,但写法不同。mapActions中是一个数组,mapMutations中是一个对象。
然后同mapMutation一样,在在其他地方,如生命周期内或者某个方法里直接输入
this.setInformation({information:'nihao'}) 便可设置userId为‘nihao’。注意:这里的参数是一个对象,因为我们在actions中定义了{information}传入的参数为对象。

这就是我对vuex的理解,有问题可以留言,希望这篇文章对你有用!

更多内容可以前往我的个人博客——小皮咖

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue.js是一个流行的JavaScript框架,它允许您构建动态Web应用程序。Vuex是一个专为Vue.js应用程序开发的状态管理模式。它允许您在应用程序中管理和维护状态,例如用户信息、购物车、主题等。Vuex将状态存储在一个集中的存储库中,称为store。Vuex的核心概念包括state、mutations、actions和getters。 - state:存储应用程序级别的状态,可以通过store.state访问。 - mutations:用于更改状态的函数,必须是同步函数。可以通过store.commit方法调用。 - actions:用于处理异步操作的函数,可以包含任意异步操作。可以通过store.dispatch方法调用。 - getters:用于从store中获取状态的函数,可以通过store.getters访问。 下面是一个简单的示例,演示如何在Vue.js应用程序中使用Vuex: 1.安装Vuex ```shell npm install vuex --save ``` 2.创建store ```javascript import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) const store = new Vuex.Store({ state: { count: 0 }, mutations: { increment (state) { state.count++ } }, actions: { incrementAsync ({ commit }) { setTimeout(() => { commit('increment') }, 1000) } }, getters: { getCount: state => { return state.count } } }) export default store ``` 3.在Vue组件中使用store ```javascript <template> <div> <p>Count: {{ count }}</p> <button @click="increment">Increment</button> <button @click="incrementAsync">Increment Async</button> </div> </template> <script> import { mapGetters, mapActions } from 'vuex' export default { computed: { ...mapGetters([ 'getCount' ]) }, methods: { ...mapActions([ 'increment', 'incrementAsync' ]) } } </script> ``` 在上面的示例中,我们创建了一个名为count的状态,并定义了一个名为increment的mutation和一个名为incrementAsync的action。我们还定义了一个名为getCount的getter,用于从store中获取count状态。在Vue组件中,我们使用mapGetters和mapActions帮助程序将getter和action映射到组件中。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值