Vuex 的基本使用和基本原理

115 阅读1分钟

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式
可以实现组件间的通讯等一系列的功能

Vuex的基本使用

· 在使用vue create 创建了脚手架后,找到main.js文件进行配置

import Vue from 'vue'
import App from '/App.vue'
import Vuex from 'vuex'   //引入vuex

Vue.config.productionTip  //使浏览器不在控制台中显示提示

Vue.use(vuex)     //使用了vuex中install方法

const store = new Vuex.Store({})  //通过构造函数创建一个实例对象

new Vue({
    render:h=>h(App),
    store  //es6写法  相当于 store:store
})

到这里Vuex的基本配置就完成了

vue中-state

state是放置所有公共状态的属性,如果你有一个公共状态数据 , 你只需要定义在 state对象中

首先是定义一个state,在刚才的定义的store中配置

const store = new Vuex.Store({
    state:{
         num:0
     }
})

方法一、然后如果要在其他组件中使用
{{$vuex.state.name}}

方法二、或者是使用计算属性
先引入vuex的自带方法
import { mapState } from 'vuex'

再在computed中配置


computed:{
    ...mapState(['name'])
}

vuex-mutations

这里以一个简单的例子(是state中num加指定值)演示

首先同样的在store中进行配置

const store = new Vuex.Store({
    state:{
        num:0
    },
    mutation:{
        addNum(state,payload){
            state.num +=payload
        }            //state直接就是指向store中的state的,类似this.store.state,而payload即传入的参数
    }
})

方法一:直接使用 this.$store.commit('addNum')调用

方法二:现在相应组件内引用方法
import { mapMutations } from 'vuex'
再在method中定义

methods: {
    ...mapmutations['addNum']
 }

vue中-actions

主要负责一些异步的操作,例如请求数据等

首先一样要在store中定义

const store = new Vuex.Store({
    state:{
        num:0
    },
    mutation:{
        addNum(state,payload){
            state.num +=payload
        }
    },
    actions:{                   //这里用计时器代替请求数据
        getStates(store,payload){      //表示的类似于this.$store
            setTimeout(function(){
                store.commit('addNum',payload)
            },1000)
        }
    }
})

之后便是调用
方法一: this.$store.dispatch('getStates',123) 方法二: import { mapActions } from 'vuex'\

methods: {
    ...mapActions['getStatus']
 }

例子中的main.js的完全代码如下


import Vue from 'vue'
import App from './App.vue'
import Vuex from 'vuex'
Vue.config.productionTip = false
Vue.use(Vuex)
const store = new Vuex.Store( {
  state: {
  // 管理数据
  count: 0},
  mutations:{
    addCount(state,payload){
      state.count +=payload
    }
  },
  actions:{                   //这里用计时器代替请求数据
    getStates(store,payload){      //表示的类似于this.$store
        setTimeout(function(){
            store.commit('addCount',payload)
        },1000)
    }
}
})
new Vue({
  render: h => h(App),
  store
}).$mount('#app')

最后,写的不好还请多多担待。