解决VUEX的mapState/...mapState等取值问题


Posted in Javascript onJuly 24, 2020

有木有发现你页面的this.$store,一般都正常,但是总有那么几次,成为你页面报错的罪魁祸首!,那其实除了和vue的生命周期有关以外,还跟store取值的方式有关,下面就说一下新大陆之——mapState mapMutations mapGetters的使用

简单说一下我对mapState的理解,字面意思就是把store中state 的值遍历出来,任你取用,就不用写this.$store.getters.getState.openId等这么长的取值了,同理,mapMutations mapGetters也是把store中对应的mutations getters方法遍历出来

下面上代码,看一下具体怎么操作

store.js代码

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

Vue.use(Vuex)

export default new Vuex.Store({
 state: {
 showLoading0: true,
 showLoading1: true,
 showLoading2: true,
 showLoading3: true,
 // 头大不复制了......
 showLoading9: true,
 },
 // getters 适用于获取值,不会改变state原值
 getters: {
 getStore (state) {
  return state
 }
 },
 // 修改state
 mutations: {
 updateLoading (state, showLoading) {
  state.showLoading = showLoading
 }
 },
 actions: {

 }
})

原来vue中的代码

<script>
export default {
 data() {
 return {
  showLoading0: this.$store.getters.getStore.showLoading0,
  showLoading1: this.$store.getters.getStore.showLoading1,
  showLoading2: this.$store.getters.getStore.showLoading2,
  showLoading3: this.$store.getters.getStore.showLoading3,
  // 头大不复制了......
  showLoading9: this.$store.getters.getStore.showLoading9
 }
 },
 methods: {
 updateLoading() {
  this.$store.commit('updateLoading', false)
 }
 }
}
</script>

弱弱的问问看官,你脚的这个this.$store烦不烦,这要是有十个值,甚至要看到整整齐齐的十个this.$store…唉呀,真可怕,这时候mapState的用途就来了,看代码:

<script>
// 用之前要先引入vuex中的mapXXX方法
import { mapState } from 'vuex'
export default {
 data() {
 return {
  showLoading0: (state) => state.showLoading0
  showLoading1: (state) => state.showLoading1
  showLoading2: (state) => state.showLoading2
  showLoading3: (state) => state.showLoading3
  // 头大不复制了......
  showLoading9: (state) => state.showLoading9
 }
 }
}
</script>

听说你还不满意?那看看下面的简写吧,别被自己曾经的方法蠢哭哦~

// 用之前要先引入vuex中的mapXXX方法
import { mapState } from 'vuex'
export default {
 //data() {
 // return {
 // }
 //}
 // 对你没有看错哦,不用data接收了,直接用computed,使用和data里一模一样哦~
 // <h1 v-if="showLoading0">{{showLoading1}}</h1>
 // console.log(this.showLoading9)
 computed: {
 ...mapState([
  'showLoading0','showLoading1',....,'showLoading9'
 ])
 }
}

mapMutations mapGetters的使用也是同理

// 用之前要先引入vuex中的mapXXX方法
import { mapState } from 'vuex'
export default {
 // 使用 this.getStore()
 computed: {
 ...mapGetters([
  'getStore'
 ])
 },
 // 使用this.updateLoading() 
 // 就相当于this.$store.commit('updateLoading')
 methods: {
 ...mapMutations([
   'updateLoading'
  ]),
 }
}

其实最好采用computed的方式取值,这样会避免很多问题的发生,特别是数据更新不及时~

补充知识:vuex的mapState方法来获取vuex的state对象中属性

有两种写法

1.首先在组件中引入vuex的mapState方法:

import { mapState } from 'vuex'

然后在computed中这样写:

computed:{
  ...mapState({
    save:state => state.save//使用ES6的箭头函数来给count赋值
  })
}

2.需要先在组件中引入vuex的mapState方法:

import { mapState } from 'vuex'

然后在computed中这样写:

computed:

 ...mapState([' save'])
}

以上这篇解决VUEX的mapState/...mapState等取值问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
比较搞笑的js陷阱题
Feb 07 Javascript
JQuery 自定义CircleAnimation,Animate方法学习笔记
Jul 10 Javascript
Jquery实现仿新浪微博获取文本框能输入的字数代码
Feb 22 Javascript
IE、FF浏览器下修改标签透明度
Jan 28 Javascript
Javascript中引用示例介绍
Feb 21 Javascript
jquery中的ajax方法怎样通过JSONP进行远程调用
May 04 Javascript
javascript数据类型示例分享
Jan 19 Javascript
详解JavaScript正则表达式之RegExp对象
Dec 13 Javascript
学习javascript面向对象 理解javascript原型和原型链
Jan 04 Javascript
html判断当前页面是否在iframe中的实例
Nov 30 Javascript
详解js的延迟对象、跨域、模板引擎、弹出层、AJAX【附实例下载】
Dec 19 Javascript
JavaScript数组去重的6个方法
Jan 21 Javascript
对vuex中store和$store的区别说明
Jul 24 #Javascript
小程序实现简单语音聊天的示例代码
Jul 24 #Javascript
浅谈Vuex的this.$store.commit和在Vue项目中引用公共方法
Jul 24 #Javascript
vue中全局路由守卫中替代this操作(this.$store/this.$vux)
Jul 24 #Javascript
javascript实现支付宝滑块验证码效果
Jul 24 #Javascript
解决父组件将子组件作为弹窗调用只执行一次created的问题
Jul 24 #Javascript
如何通过vscode运行调试javascript代码
Jul 24 #Javascript
You might like
解析PHP中的正则表达式以及模式匹配
2013/06/19 PHP
php rsa 加密,解密,签名,验签详解
2016/12/06 PHP
php桥接模式应用案例分析
2019/10/23 PHP
javascript call和apply方法
2008/11/24 Javascript
js读取csv文件并使用json显示出来
2015/01/09 Javascript
jquery实现select选择框内容左右移动代码分享
2015/11/21 Javascript
JS实现重新加载当前页面或者父页面的几种方法
2016/11/30 Javascript
详解js中Number()、parseInt()和parseFloat()的区别
2016/12/20 Javascript
angularjs实现分页和搜索功能
2018/01/03 Javascript
JavaScript中七种流行的开源机器学习框架
2018/10/11 Javascript
超详细的5个Shell脚本实例分享(值得收藏)
2019/08/15 Javascript
基于JS判断对象是否是数组
2020/01/10 Javascript
使用python获取CPU和内存信息的思路与实现(linux系统)
2014/01/03 Python
详解Python中的join()函数的用法
2015/04/07 Python
Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例
2018/03/15 Python
Tensorflow卷积神经网络实例进阶
2018/05/24 Python
Django Admin实现三级联动的示例代码(省市区)
2018/06/22 Python
详解Django中类视图使用装饰器的方式
2018/08/12 Python
pygame游戏之旅 调用按钮实现游戏开始功能
2018/11/21 Python
django框架实现一次性上传多个文件功能示例【批量上传】
2019/06/19 Python
Python Pandas数据中对时间的操作
2019/07/30 Python
Python Request爬取seo.chinaz.com百度权重网站的查询结果过程解析
2019/08/13 Python
详解python uiautomator2 watcher的使用方法
2019/09/09 Python
Python实现把类当做字典来访问
2019/12/16 Python
银河香水:Galaxy Perfume
2019/03/25 全球购物
Ever New美国:澳大利亚领先的女装时尚品牌
2019/11/28 全球购物
远东集团网络工程师面试题
2014/10/20 面试题
EJB实例的生命周期
2016/10/28 面试题
医学生自我鉴定范文
2013/11/08 职场文书
物流管理专业应届生求职信
2013/11/21 职场文书
三分钟演讲稿事例
2014/03/03 职场文书
2014年平安夜寄语
2014/12/08 职场文书
仓管员岗位职责
2015/02/03 职场文书
2015教师年度考核评语
2015/03/25 职场文书
朝花夕拾读书笔记
2015/06/29 职场文书
2016年读书月活动总结范文
2016/04/06 职场文书