vuex中mapGetters,mapActions使用
vuex运行流程图如下1.Vue Components 是我们的 vue 组件,组件会触发(dispatch)一些事件或动作,也就是图中的 Actions2.我们在组件中发出的动作,肯定是想获取或者改变数据的,但是在 vuex 中,数据是集中管理的,我们不能直接去更改数据,所以会把这个动作提交(Commit)到 Mutations 中3.然后 Mutations 就去改变(Mutate)State
vuex运行流程图如下
1.Vue Components 是我们的 vue 组件,组件会触发(dispatch)一些事件或动作,也就是图中的 Actions
2.我们在组件中发出的动作,肯定是想获取或者改变数据的,但是在 vuex 中,数据是集中管理的,我们不能直接去更改数据,所以会把这个动作提交(Commit)到 Mutations 中
3.然后 Mutations 就去改变(Mutate)State 中的数据;
4.当 State 中的数据被改变之后,就会重新渲染(Render)到 Vue Components 中去,组件展示更新后的数据,完成一个流程。
Vuex 的核心是 Store,相当于是一个容器,一个 Store 实例中包含以下属性的方法:
state中定义属性(状态 、数据)
我们要访问state中的数据有以下两种方法
// 定义属性(数据)
var state = {
count:6
}
// 创建 store 对象
const store = new Vuex.Store({
state
})
// 暴露 store 对象
export default store;
方式1 在 app.vue 中就能通过 this.$store 访问该 store 对象 ,获取该 count 。
<template>
<div id="app">
//把 count 方法直接写入,可自己执行
<h1>{{count}}</h1>
</div>
</template>
<script>
export default {
name: 'app',
computed:{
count(){
//返回获取到的数据
return this.$store.state.count
}
}
}
</script>
方式2 vuex 提供的 mapGetters 和 mapActions 来访问
mapGetters 用来获取属性(数据)
1. 在 app.vue 中引入 mapGetters
import {mapGetters} from 'vuex'
2. 在 app.vue 文件的计算属性中调用 mapGetters 辅助方法,并传入一个数组,在数组中指定要获取的属性 count
<script>
import {mapGetters,mapActions} from 'vuex'
export default {
name: 'app',
computed:mapGetters([
//此处的 count 与以下 store.js 文件中 getters 内的 count 相对应
'count'
])
}
</script>
3. 在 store.js 中定义 getters 方法并导出 getters 用来获取属性
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
// 定义属性(数据)
var state = {
count:6
}
// 定义 getters
var getters={
//需要传个形参,用来获取 state 属性
count(state){
return state.count
}
}
// 创建 store 对象
const store = new Vuex.Store({
state,
getters
})
// 导出 store 对象
export default store;
这样页面上就会显示传过来的数据,接下来我们来通过动作改变获取到的数据
4. 在 store.js 中定义 actions 和 mutations 方法并导出actions 定义方法(动作),可以使异步的发送请求。commit 提交变化,修改数据的唯一方式就是显示的提交 mutations。mutations 定义变化,处理状态(数据)的改变。
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
// 定义属性(数据)
var state = {
count:6
}
// 定义 getters
var getters={
count(state){
return state.count
}
}
// 定义 actions ,要执行的动作,如流程的判断、异步请求
const actions ={
// ({commit,state}) 这种写法是 es6 中的对象解构
increment({commit,state}){
//提交一个名为 increment 的变化,名字可自定义,可以认为是类型名,与下方 mutations 中的 increment 对应
//commit 提交变化,修改数据的唯一方式就是显式的提交 mutations
commit('increment')
}
}
// 定义 mutations ,处理状态(数据) 的改变
const mutations ={
//与上方 commit 中的 ‘increment' 相对应
increment(state){
state.count ++;
}
}
// 创建 store 对象
const store = new Vuex.Store({
state,
getters,
actions,
mutations
})
// 导出 store 对象
export default store;
5. 在 app.vue 中引入 mapActions ,并调用mapActions 用来获取方法(动作)
import {mapGetters,mapActions} from 'vuex'
调用 mapActions 辅助方法,并传入一个数组,在数组中指定要获取的方法 increment
<template>
<div id="app">
//这个 increment 方法与下面 methods 中的 increment 相对应
<button @click="increment">增加</button>
<button>减少</button>
<h1>{{count}}</h1>
</div>
</template>
<script>
import {mapGetters,mapActions} from 'vuex'
export default {
name: 'app',
computed:mapGetters([
'count'
]),
methods:mapActions([
//该 increment 来自 store.js 中导出的 actions 和 mutations 中的 increment
'increment',
])
}
</script>
更多推荐
所有评论(0)