vue全家桶之vuex

vue全家桶之vuex

在vue中各组件的传值有很多种方式,父子间传值,兄弟之间的传值等,在嵌套关系很深的情况下我们还可以用bus总线传值,但是这些都会显得太过复杂

在vue中我们可以使用vuex来保存我们需要管理的状态值,值一旦被修改,所有引用该值的地方就会自动更新

vuex 是一个专门为vue.js应用程序开发的状态管理模式。

这个状态我们可以理解为在data中的属性,需要共享给其他组件使用的部分。

安装

​ 安装vuex,使用命令:npm install vuex --save

​ 我们需要在项目的src目录下新建一个目录store,在该目录下新建一个index.js文件,我们用来创建vuex实例,然后在该文件中引入vue和vuex,创建Vuex.Store实例保存到变量store中,最后使用export default导出store:

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use( Vuex )

// 创建store模块

// const store = new Vuex.Store( options ) options为store配置选项

const store = new Vuex.Store({
    state, 
    actions,
    mutations,
    getters,
})

// 导出store模块

export default store

​ 最终这个文件是要在main.js中引入的,其实直接在main文件中写如整个store都是可以的,但是会显得太过混乱,所以我们在src中创建一个文件夹。实际不管建在哪个地方都是可以的

import Vue from 'vue'
import App from './App.vue'

import store from './store'

Vue.config.productionTip = false

new Vue({
  store,
  render: h => h(App),
}).$mount('#app')

vuex中五种对象

vuex中,有默认的五种基本的对象:

  • state:存储状态(变量)-------类似于vue里面的data
  • getters:对数据获取之前的再次编译,可以理解为state的计算属性。我们在组件中使用 $sotre.getters.fun()-------类似于computed
  • mutations:修改状态,并且是同步的。在组件中使用$store.commit(’’,params)。这个和我们组件中的自定义事件类似-------类似于vue里面的methods
  • actions:异步操作。在组件中使用是$store.dispath(’’)
  • modules:store的子模块,为了开发大型项目,方便状态管理而使用的。这里我们就不解释了,用起来和上面的一样。

state

​ state中存放的都是数据,作用类似于vue里面的data,但是所有的组件都快可以访问,起到组件内通信的作用

使用方式:在组件内部

 <p>{{this.$store.state.count}}</p>

​ vuex类似于bus总线,在组件内我们不能直接调用,需要从this里面找到使用

mutations

​ mutations中存放都是的方法,类似于vue组件中的methods,state中的数据只能通过mutations才能改变

​ 在sotre.js中定义mutations对象,该对象中有两个方法,mutations里面的参数,第一个默认为state,接下来的为自定义参数

const mutations = {

    ins(state){
        state.count ++
    }
}

export default mutations 
<script>
export default {
    methods:{
        add(){
         this.$store.commit('ins')
        }
    }
}
</script>

​ 我们也是通过当前this下的 s t o r e 使 用 的 。 c o m m i t 类 似 于 b u s 总 线 中 的 store使用的。commit类似于bus总线中的 store使commitbus线emit。

actions

​ mutations的方法都是同步的,这就有了一定的限制,引入了actions,在这个里面可以写异步的方法

const actions = {
    actionsAdd(context) {
        return context.commit('ins')
    }
}

​ context连接actions与mutations,在组件使用也有所不同,是用dispatch来触发

handleActionsAdd(n){
      this.$store.dispatch('actionsAddCount')
    }

getters

我们一般使用getters来获取我们的state,因为它算是state的一个计算属性,类似于computed

const getters = {
    getCount ( state ) {
        return state.count
    }
}

在组件内使用

 <p>{{ this.$store.getters.getCount  }} </p>

你可能感兴趣的:(vue,vuex,全家桶)