Vuex入门(vue集中式状态管理架构)

1.什么是状态:

可以理解为在data中的属性需要分享给其他vue组件使用的部分,就叫做状态。简单的说就是data中需要共有属性。

例如:在中大型项目中会有很多共用的数据。我们有几个页面同时显示用户的名称和用户等级,如果不把这些属性设置为状态,那每个页面遇到后,都会到服务器进行查找计算,返回后再显示。这样消耗大量性能,得不偿失,而vuex是一个很好的解决方法。

2.安装

·npm install vuex --save/cnpm install vuex --save

3.引入

·import Vue from 'vue'

·import Vuex from 'vuex'

Vue.use(Vuex);

4.实例

·现在我们新建store.js文件,在里面增加一个常量对象。store.js文件就是我们引入vuex时的那个文件。

const state={

    count:1

}

·用export default封装代码,让外部可以引用

export default new Vuex.Store({

    state

})

·新建一个vue的模版,位置在components文件夹下,名字叫count.vue,在模版中我们引入我们刚建的store.js文件,并在模版中用$store.state.count输出count的值。

·在store.js文件中加入两个改变state的方法

const mutations={

    state.count++;

},

reduce(state){

    state.count--;

}}

注:这里的mutations时固定的写法,意思是改变的,要改变state的数值的方法必须写在mutations里。

·在count.vue模版中加入两个按钮,并调用mutations中的方法

   

注:这样进行预览就可以实现对vuex中的count进行加减了。

·将状态对象赋值给内部对象,也就是把stroe.js中的值赋值给我们模版中data中的值(读取数据)。三种方法:

1)通过computed的计算属性直接赋值

注:computed属性可以在输出前,对data中的值进行改变,我们就利用这种特性把store.js中的state值赋值给我们模版中的data值。

computed:{

        count(){

            return this.$store.state.count;    

        }    

}

注:这里需要注意的是return this.$state.count这一句,一定要写this,不然找不到$store。这种方法很好理解,写起来复杂。


2)通过mapState的对象来赋值

我们首先要用import引入mapState:

import {mapState} from 'vuex';

然后还在computed计算属性里写如下代码:

computed:mapState({

    count:state=>state.count

})

注:这里我们使用ES6的箭头函数来给count赋值


3)通过mapState的数组来赋值:

    computed:mapState([""count])

注:这个算是最简单的写法,在实际项目开发中也经常这样使用。


·Mutations修改状态(修改数据)

·$store.commit()

Vuex提供commit方法来修改状态,我们在button上修改方法:

·store.js 文件:

    const mutations={

                add(state){

                state.count++;

        },

    reduce(state){

        state.count--;

    }

}


·传值:这只是一个最简单的修改状态的操作,在实际项目中我们常常需要在修改状态时传值。比如上边的例子,是我们每次只加1,而现在我们要通过所传的值进行相加。只需要在Mutations里再加上一个参数,并在commit的时候传递。

注意:现在store.js文件里给add方法加上一个参数n。

    const mutations={

          add(state,n){

            state.count+=n;

    },

    reduce(state){

        state.count--;

    }

}

·在Count.vue里修改按钮commit()方法传递的参数,我们传递10;意思是每次加10

    

注:这样两个简单的修改我们就完成了传值。

·模版获取Mutations方法

实际开发中我们也不喜欢看到$store.commit()这样方法出现,希望跟调用模版里的方法一样调用

例如:@click="reduce"就和没引用vuex插件一样

要达到这种写法,只需要两步:

1)在模版count.vue里用import引入我们的mapMutations:

import {mapState,mapMutations} from 'vuex';


2)在模版的

你可能感兴趣的:(Vuex入门(vue集中式状态管理架构))