Vuex

最近学着在用vue开发项目,边学边记真的是个好习惯呢

Vuex

安装 Vuex

npm i vuex --save-dev

在src文件夹下,新建一个store文件夹,创建index.js 做如下配置

import Vue from 'Vue';
import Vuex from 'vuex';
import state from './state';
import getters from './getters'
import mutations from './mutations'
import actions from './actions'
import modules from './modules'

Vue.use('Vuex');
export default new Vuex.Store({
    state,
	getters,
	mutations,
	actions,
	modules
})

然后在main.js下的vue实例下挂载store
Vuex 是一个专为Vue.js设计的状态管理模式;

  • vuex解决组件之间同一状态的共享问题。比如token
  • 有了vuex,组件和store通讯了
    Vue.store
  • state 进行组件共享数据的集中存储{}
  • getters 原理computed用于返回最新的数据值{计算属性写法}
  • mutations 唯一一个能够修改state里面数据的地方(不能做异步)
  • actions 处理异步请求–异步调用mutations函数
  • modules模块,当数据较多的情况下,而且数据之前没有什么关系,用模块划分,每一个模块对象都包含以上4部分
    mapState mapGetters mapActions
  • commit 同步调用mutations方法
  • dispatch 异步调用actions方法

State --放一些全局数据 变量

var state={
    count:0,
    name:''
}
export default state

在组件内使用这些数据

<h3>{{this.$store.state.count}}</h3>
<h3>{{this.$store.state.info.count}}</h3>//这个是在modules里info的state
<h3>间接获取 {{count}}</h3> //间接获取state里的某数据

mutations --存放全局函数 作用:唯一修改state里数据的地方

var mutations={
    add(state){
        state.count++
    },
    jian(state){
        state.count--
    },
    login(state,name){
        state.name = name
    }
}
export default mutations 

在组件里调用mutations

tap(){
    this.$store.commit('add')
},
login(){
    this.$store.commit('login',this.username);
}

在组件里间接获取(语法糖)

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

actions 处理异步请求

var actions = {
    jian({commit}){
        setTimeout(function(){
            commit('jian')
        },2000)
    },
    login({commit},name){
        setTimeout(function(){
            commit('login',name)
        },2000)
    }
}
export default actions

在组件里异步调用 actions里的异步函数 以及传参

methods{
...mapActions(['jian','login1'])// 其中传参是在login1(username)传的,username是data里的数据
//或者
    tap(){
        this.$store.dispatch('jian')
    }   
}

getters 一些随着绑定的数据变化而产生变化 计算属性

var getters={
    count1: function(state){
        if(state.count>10){
            return 'hello world'
        }else{
            return 'hi'
        }
    }
    
}
export default getters;

在组件里调用

computed:{
    ...mapGetters(['count1'])
}

modules 将store分割成模块(modules),每个模块拥有自己的(state,mutations,actions,getter);方便维护

上一篇:Vuex的简单认识


下一篇:Vuex的安装、使用及注意事项