vuex中...mapstate和...mapgetters的区别及说明
作者:番茄炒蛋多加米饭 发布时间:2023-07-02 16:33:53
...mapstate和...mapgetters的区别
…mapstate
当一个组件需要获取多个状态时候,将这些状态都声明为计算属性会有些重复和冗余。为了解决这个问题,我们可以使用 mapState 辅助函数帮助我们生成计算属性,当映射的计算属性的名称与 state 的子节点名称相同时,我们也可以给 mapState 传一个字符串数组。
computed: mapState([
// 映射 this.count 为 store.state.count
'count'
])
官方文档如上
因为state相当于data,getters相当于计算属性,个人理解如果只需要拿到state中一个值,就没必要在getters中作为计算属性出现。
…mapGetters
辅助函数仅仅是将 store 中的 getter 映射到局部计算属性
如果你想将一个 getter 属性另取一个名字,使用对象形式:
...mapGetters({
// 把 `this.doneCount` 映射为 `this.$store.getters.doneTodosCount`
doneCount: 'doneTodosCount'
})
官方文档如上
相当于计算属性,等于把vuex中的计算属性映射到了当前组件中
vuex mapState mapGetters用法及多个module下用法
在vuex,当一个组件需要获取多个状态的时候,将这些状态都声明为计算属性会有些重复和冗余,例如
computed: {
count() {
return this.$store.state.count
},
name() {
return this.$store.state.name
},
age() {
return this.$store.getter.age
},
userInfo() {
return this.$store.getter.userInfo
}
}
为了解决这个问题,我们可以使用 mapState和mapGetters 辅助函数帮助我们生成计算属性,让你少按几次键
一、mapState
1、对象写法
// 在单独构建的版本中辅助函数为 Vuex.mapState
import { mapState } from 'vuex'
export default {
computed: mapState({
// 传函数参数
count: state => state.count, // 箭头函数可使代码更简练 映射为this.count
userCount: state => state => state.user.count, // 模块化写法 箭头函数可使代码更简练 映射为this.userCount
// 传字符串参数
userName: 'name', // name等同于state => state.name,不支持模块化写法 映射为this.userName
// 需要使用this局部状态,使用常规函数写法
age(state) { // 映射为this.age
return state.age + this.age // 可与局部状态组合
}
})
}
2、字符串数组写法
除此之外,还有更简洁的写法
当映射的计算属性的名称与 state 的子节点名称相同时,我们也可以给 mapState 传一个字符串数组,类似于对象的key和value键名相同时{ name: name } =》{ name }
computed: mapState([
'count', // 映射 this.count 为 store.state.count
'name' // 映射 this.name为 store.state.name
])
此外如果是用到了module模块化,除了将对象作为参数传递之外,namespaced mapState还可以使用两个参数:namespace和表示模块成员的对象名称数组,像这样
computed: mapState('user', ['count', 'name']) // user 模块名称
3、使用展开运算符
mapState 函数返回的是一个对象,这样就造成无法与当前局部组件计算属性混合使用
以前我们需要使用一个工具函数将多个对象合并为一个,以使我们可以将最终对象传给 computed 属性。
自从有了展开运算符后,可以极大地简化写法
computed: {
...mapState([
'count', // 映射 this.count 为 store.state.count
'name' // 映射 this.name为 store.state.name
]),
// 局部组件计算属性
localComputed () {},
}
二、mapGetters
mapGetters辅助函数写法相同
computed: {
...mapGetters([
'count', // 映射 this.count 为 store.getters.count
'name' // 映射 this.name为 store.getters.name
]),
// 局部组件计算属性
localComputed () {},
}
模块化写法
...mapGetters('user', ['count', 'name']) // user 模块名称
三、mapActions、mapMutations
mapActions、mapMutations用法相同,他们的作用都是把actions、mutations里的方法映射到局部组件调用
例如:
以前的调用actions:
this.$store.dispatch("test", "value")
this.$store.dispatch("user/test", "value") // user模块化, 第二个参数为传参
使用辅助函数后调用
...mapActions([
"test",
])
this.test('value')
总结以上,推荐使用展开运算符+字符串数组传参的方式使用,可以极大简化代码,更优雅,不冗余
这些仅为个人经验,希望能给大家一个参考,也希望大家多多支持。
来源:https://blog.csdn.net/m18697787579/article/details/123218840


猜你喜欢
- 今天帮助同事解决一个问题,问题是她做的一套页面在FF下显示正常,在IE6下样式却没有效果,也就是没有应用样式。最终发现是编码不匹配的问题,c
- python操纵mysql数据库,向一个表中插入一条新的记录。pycahrm提供一个很好的功能,在右边上面,可以连接数据库,并在里面手动操作
- Pytest-sugar是一款用来改善控制台显示的插件,增加了进度条显示,使得在用例执行过程中可以看到进度条,而且进度条是根据用例是否通过标
- 如何用表单的方式推送请求的信息?具体见下:<html><head><title>答复用户信息
- Python中可以使用collections中的defaultdict类实现创建进行统一初始化的字典。这里总结两种常用一点的初始化方式,分别
- python中同样使用关键字class创建一个类,类名称第一个字母大写,可以带括号也可以不带括号;python中实例化类不需要使用关键字ne
- 关于段落<p></p>相信大家已经都在自己的工作中开始关注并应用了。因为那真的是非常简单的事,只要你愿意你随时都可以
- 在SQL Server中,TempDB主要负责供下述三类情况使用:内部使用(排序、hash join、
- 扫雷是一个非常经典的WIN游戏,我们教给大家用python语言来写出这个游戏,以下是全部实例代码:#!/usr/bin/python#cod
- SQL Server数据库连接中常见的错误分析:一."SQL Server 不存在或访问被拒绝"这个是最复杂的,错误发生
- 这一篇笔记介绍 Django 系统 model 的外键处理,ForeignKey 以及相应的处理方法。这是一种一对多的字段类型,表示两张表之
- 1 . 如何让自己的本地APACHE服务器支持.htaccess 如何让自己的本地APACHE服务器支持”.htaccess”呢?其实只要简
- 画布可以做很多事情,比如可以绘图,也可以做海报。在这里只是想拿它来的实现亲笔签名,开启不一样的亲笔签名姿势。开发框架:uniapp开发语言:
- Mysql同时交换两个表的表名表重命名有两种方式,所以交换两表名也有两种方式:1 .lock tables t1 write ,t2 wri
- ChatGPT(全名:Chat Generative Pre-trained Transformer),美国OpenAI 研发的聊天机器人程
- TTS简介TTS(Text To Speech)是一种语音合成技术,可以让机器将输入文本以语音的方式播放出来,实现机器说话的效果。TTS分成
- Tips:微信小程序可以在HbuilderX用HTML标签(如Ddiv、span等)写前端代码,也可以用微信小程序语法写(view、swip
- sql server 锁定模式有三种:共享( S锁),更新(U锁),排他(X锁);S锁是共享锁,如果事务T对数据A加上共享锁后,则其他事务只
- 异常:python3的xadmin主题只显示默认和bootstrap2解决办法:慢慢来相信能遇到这个问题的人,都是已经配置好xadmin的,
- 我们知道同步执行和异步执行的区别,为了更好的提高用户的体验,我们都会采用异步方式去处理一些问题,毕竟单线程的同步可能回造成卡死等现象,很不友