vuex05Action与mapAction
【摘要】 Action是什么 Action 提交的是 mutation,而不是直接变更状态。当然Action也获取state,getter Action 可以包含任意异步操作。Action 函数接受一个与 store 实例具有相同方法和属性的 context 对象,因此你可以调用 context.commit 提交一个 mutation,或者通过 context.state 和 context.ge...
Action是什么
Action 提交的是 mutation,而不是直接变更状态。
当然Action也获取state,getter
Action 可以包含任意异步操作。
Action 函数接受一个与 store 实例具有相同方法和属性的 context 对象,因此你可以调用 context.commit 提交一个 mutation,或者通过 context.state 和 context.getters 来获取 state 和 getters。
const store = new Vuex.Store({
state: {
name: "old name",
age: 18,
sex: "女",
},
mutations: {
changName(state) {
state.name = "newName"
},
addAge(state, num) {
state.age += num
},
changSex(state) {
state.sex = state.age + "男"
}
},
actions: {
useActionToChangName(context) {
// 这里的context也可以写成{commit,state}
context.commit('changName')
context.commit('addAge',10)
}
}
})
使用Dispatch来触发事件
methods: {
changeNameAndAge() {
this.$store.dispatch({ type: "useActionToChangName" });
},
或者
changeNameAndAge() {
this.$store.dispatch ("useActionToChangName" );
},
}
mapActions
- 引入
import { mapActions } from 'vuex'
- 使用
methods: {
...mapActions([
'useActionToChangName', // 将 `this.useActionToChangName()` 映射为 `this.$store.dispatch('useActionToChangName')`
// `mapActions` 也支持载荷:
'incrementBy' // 将 `this.incrementBy(amount)` 映射为 `this.$store.dispatch('incrementBy', amount)`
]),
...mapActions({
add: 'useActionToChangName' // 将 `this.add()` 映射为 `this.$store.dispatch('useActionToChangName')`
})
}
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)