vue笔记之vuex-state、mutation

已被阅读 1155 次 | 文章分类:VUE | 2018-11-06 22:25

个人理解,不要被其中的各种新鲜名词混淆;完全可以把它作为一个全局对象学习即可,所谓的状态其实就是数据和方法的变化给组件带来的影响;因为vue组件式开发的便利,耦合性降低了,那么相应带来的问题就是所有组件如何共用相同的数据以及方法呢;对于普通编程,定义一个全局对象,里面包装数据以及方法,在哪里都可以调用;但是在vue中怎么解决呢,所以vue实现了vuex的解决方案;他的核心是一个store容器对象,里面有属性,方法

一:效果

/net/upload/image/20181105/59e99b96-ae2d-4d5a-9bad-094c7f5f342a.gif

二:详解vuex-state工作流程

vuex store对象的核心概念有State、Mutation、Getter、Action、Module五个;其实都是围绕数据和方法定义的几个核心规范模块;本节先了解一下state和mutation

1. 安装vuex

                                            
npm install --save vuex
                                            
                                        

2. 引入vuex

                                            
import vuex from 'vuex'
                                            
                                        

3. 注册VueRouter

                                            
Vue.use(vuex);
                                            
                                        

4. 实例化vuex store对象;定义store对象,有一个对象参数,而该对象就可以包含我们需要用到的五个核心模块

                                            
//这里先来认识state(状态)和mutation(突变)模块
const store = new Vuex.Store({
  state: {
    count: 2
  },
  mutations: {
    increment (state) {
      state.count++
    }
  }
})     
                                            
                                        

5. 在根对象注入store

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

6. 如何使用这个"全局对象"store呢

                                            
//通过一下方式可以在整个应用程序的所有组件中,都可以拿到count的值,this即上面New的vue对象                            
this.$store.state.count
                                            
                                        

我们在child1组件中可以拿到值

                                            
<template>
    <div>
        <h1>{{title}}</h1>
        <h2>{{count()}}</h2>
    </div>
</template>
<script>
export default{
    name:'child1',
    data(){
        return{
            title:'子组件1'
        }
    }, 
    methods:{
         count(){
          return this.$store.state.count +20  
        }
    }
}
</script>
                                            
                                        

三: 认识Mutation(突变)

Mutation是一个对象,里面可以定义更改state的各种方法;要更改state值,必须通过注册Mutation里面的方法;通过对Mutation的学习就可以理解vuex上面的两个特点了

1. 定义Mutations对象,添加一个increment方法,参数默认是state对象;主体是让state里面的count值加1

                                            
mutations: {
    increment (state) {
      state.count++
    }
  }
                                            
                                        

只能通过上面突变函数改变state;不可能像普通对象一样赋值去改变state;如

                                            
//行不通
this.$store.state.count=10;
                                            
                                        

2. 注册Mutation中的函数;这里其实就是调用函数嘛;无非在vuex中必须通过commit(increment)的方式调用

                                            
//调用一次 值加1
store.commit('increment');   //count=3
                                            
                                        

3. 同样只要是store对象中的方法,在所有组件中就可以调用 定义一个click函数,里面注册Mutation的increment(),改变store中的count值

                                            
<template>
    <div>
        <h1>{{title}}</h1>
        <h2>{{count()}}</h2>
         <Button @click="change">改变count</Button>
    </div>
</template>
<script>
export default{
    name:'child1',
    data(){
        return{
            title:'子组件1'
        }
    }, 
    methods:{
         count(){
          return this.$store.state.count +20  
        },
         change(){
          this.$store.commit('increment');
        }
    }
}
</script>
                                            
                                        

QQ:3410192267 | 技术支持 微信:popstarqqsmall

Copyright ©2017 xiaobaigis.com . 版权所有 鲁ICP备17027716号