vuex中的 mapState,mapGetters,mapActions,mapMutations 的使用
Vuex中的四大金刚——State、Mutations、Actions、Getters,各自扮演着重要的角色,共同构成了Vuex状态管理系统的核心。本文将重点介绍如何使用mapState、mapGetters、mapActions和mapMutations来更好地管理和操作Vuex的状态。
一、四大金刚简介
在Vuex中,State作为存储数据的仓库,用于存储应用的全局状态;Mutations用于更改状态,是唯一的修改State的方式;Actions用于处理异步操作,可以提交Mutations来改变状态;Getters则用于从Store中获取数据,可以看作是Store的计算属性。
二、使用mapState、mapGetters、mapActions和mapMutations
1. mapState
当组件需要读取State中的数据时,可以使用mapState辅助函数。通过映射State中的属性,可以在组件中直接使用这些属性,无需每次都通过this.$store.state获取。例如:
```javascript
import { mapState } from 'vuex'
export default {
computed: mapState({
blogTitle: state => state.blogTitle,
todos: state => state.todos
})
}
```
2. mapGetters
当组件需要使用Getters派生的状态时,可以使用mapGetters辅助函数。这样可以将Getters映射到组件的计算属性中。例如:
```javascript
import { mapGetters } from 'vuex'
export default {
computed: mapGetters([
'getterName' // 映射一个getter到局部计算属性
])
}
```
3. mapMutations
当组件需要提交Mutations改变状态时,可以使用mapMutations辅助函数。这样可以将提交Mutation的方法映射到组件的方法中,方便调用。例如:
```javascript
import { mapMutations } from 'vuex'
export default {
methods: mapMutations({
一、简化状态数据操作
无需深入理解状态树上的复杂数据,我们可通过简化操作来轻松使用。组件中的state.todos是一个对象,在挑选不同数据时需要进行处理。为减少每次操作的复杂性,我们可以在getter中处理这些数据,然后导出一个方法以供使用。
二、创建Getter
我们创建一个getters对象,其中包含一个名为getToDo的getter。这个getter会过滤出state.todos中所有done属性为true的项,返回一个数组。这样,我们就可以在组件中直接使用这个数组,无需对原始数据进行复杂处理。
三、实际应用
1. 在项目(使用vue-cli脚手架)的src文件夹下,新建一个store文件夹,并在其中创建一个index.js文件。将上述代码,包括state、actions、mutations和getters的内容,填入此文件。
2. 在main.js文件中导入这个store。这是状态管理的核心文件,确保我们的vue实例能够访问到状态管理模块。
3. 在组件中使用。我们先提供一个组件的代码示例,然后在解释如何使用mapState、mapGetters、mapActions和mapMutations这些辅助函数来简化代码并优化状态管理。
组件代码示例:
vuex的状态管理数据
博客标题
{{ this.$store.state.blogTitle }}
todos里的信息
-
{{item.text}}
{{item.done}}
import { mapState, mapGetters, mapActions, mapMutations } from 'vuex';
export default {
// ...其他选项
created() {
this.blogAdd(); // 通过mapActions触发mutation改变state值
},
computed: {
...mapState({ viewsCount: 'views' }), // 简化state中数据的获取
...mapGetters({ todosALise: 'getToDo' }), // 使用getter简化数据处理
},
methods: {
...mapMutations({ totalAlise: 'clickTotal' }), // 直接调用mutation方法改变state值
对于官网给出的例子,我们来详细一下mapState的用法。在Vue的示例中,我们经常看到使用ES6的写法,其中涉及许多有用的特性,比如对象展开运算符。现在,我们来重点讲解一下如何使用...mapState({...})。
在狼蚁网站的SEO优化实例代码中,我们看到了如下HTML和JS代码:
HTML部分:
```html
使用mapState方式:{{viewsCount}}
直接使用views:{{this.$store.state.views}}
```
JS部分:
```javascript
...mapState({
viewsCount: 'views'
})
```
这里,我们使用mapState辅助函数将Vuex中的状态映射到组件的计算属性中。当状态值改变时,计算属性也会自动更新,避免了在组件中直接访问this.$store.state的繁琐操作。当映射的值和state的状态值相等时,我们可以直接使用简化的写法。例如:
```javascript
...mapState({
'views'
})
```
除了mapState之外,还有其他的辅助函数如mapMutations、mapActions和mapGetter。它们的作用类似于mapState,分别用于将组件中的方法映射为store的mutation调用、action调用和getter映射到局部计算属性。这些辅助函数都能够帮助我们简化代码,提高开发效率。通过合理使用这些辅助函数,我们可以更加高效地管理Vue组件的状态,避免重复劳动和繁琐的代码操作。在前端开发中,我们经常需要处理复杂的数据流,而Vue的状态管理解决方案提供了一种优雅的方式来处理这个问题。让我们深入一下如何使用Vue的getters来过滤和获取store中的状态数据。
假设我们在一个待办事项列表中工作,每一项待办事项都有一个状态标识“已完成”(done)。在Vue store中,我们定义了一个名为todos的状态数组,其中包含了所有的待办事项。我们也定义了一个名为getToDo的getter函数,用于过滤出所有已完成的事项。
在组件中,我们可以使用mapGetters辅助函数将store中的getter映射到组件的计算属性上,使得我们可以在组件中轻松访问这些经过处理的状态数据。这样做的好处是,我们可以避免在组件中直接访问复杂的this.$store.state路径,使代码更加简洁易读。
在这个例子中,“getToDo”是一个getter函数的名字,我们通过mapGetters给它赋予了一个新的别名“todosALise”。这意味着我们可以在组件中通过“todosALise”这个属性名来访问由getToDo生成的已完成待办事项的列表。
这里的getToDo函数使用了数组的filter方法,该方法会遍历todos数组中的每一个元素(在这里称为item),检查item的done属性是否为true。如果是,那么这个元素就会被包含在返回的数组中。最终,这个函数返回一个包含了所有已完成待办事项的数组。
通过使用mapGetters和类似的辅助函数(如mapState、mapActions和mapMutations),我们可以极大地简化组件中访问和操作store状态的过程。这些辅助函数允许我们将store中的状态映射到组件的属性上,使得我们可以在组件代码中直接使用这些属性,而不必每次都写复杂的this.$store.state路径。这不仅提高了代码的可读性,也使得代码更易于维护和扩展。
平面设计师
- vuex中的 mapState,mapGetters,mapActions,mapMutations 的使用
- 实例讲解jquery与json的结合
- PHP文件及文件夹操作之创建、删除、移动、复制
- 纯js实现瀑布流布局及ajax动态新增数据
- 高级MySQL数据库面试问题 附答案
- 分享3个php获取日历的函数
- JQuery+Ajax实现数据查询、排序和分页功能
- Angular使用ng-messages与PHP进行表单数据验证
- Laravel框架处理用户的请求操作详解
- react-native封装插件swiper的使用方法
- nodejs实现OAuth2.0授权服务认证
- MySQL存储引擎基础知识
- ASP.NET MVC4入门教程(七):给电影表和模型添加
- asp.net实现取消页面表单内文本输入框Enter响应的
- Thinkphp5.0框架的Db操作实例分析【连接、增删改查
- 使用element-ui的el-menu导航选中后刷新页面保持当前