解决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 相关文章推荐
De facto standard 世界上不可思议的事实标准
Aug 29 Javascript
javascript开发随笔二 动态加载js和文件
Nov 25 Javascript
js制作的鼠标悬浮时产生的下拉框效果
Oct 27 Javascript
JQuery弹出炫丽对话框的同时让背景变灰色
May 22 Javascript
浅谈JS使用[ ]来访问对象属性
Sep 21 Javascript
javascript Function函数理解与实战
Dec 01 Javascript
Angular17之Angular自定义指令详解
Jan 21 Javascript
node版本管理工具n包使用教程详解
Nov 09 Javascript
创建echart多个联动的示例代码
Nov 23 Javascript
详解vue项目接入微信JSSDK的坑
Dec 14 Javascript
JavaScript进制转换实现方法解析
Jan 18 Javascript
详解javascript脚本何时会被执行
Feb 05 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与XML的PDF文档生成技术
2006/10/09 PHP
Win2003服务器安全加固设置--进一步提高服务器安全性
2007/05/23 PHP
php Ajax乱码
2008/04/09 PHP
phpMyadmin 用户权限中英对照
2010/04/02 PHP
windwos下使用php连接oracle数据库的过程分享
2014/05/26 PHP
php实现当前页面点击下载文件的简单方法
2016/09/22 PHP
JavaScript中Array 对象相关的几个方法
2006/12/22 Javascript
EXTJS记事本 当CompositeField遇上RowEditor
2011/07/31 Javascript
Jquery和JS用外部变量获取Ajax返回的参数值的方法实例(超简单)
2013/06/17 Javascript
封装html的select标签的js操作实例
2013/07/02 Javascript
javascript强大的日期函数代码分享
2013/09/04 Javascript
JAVASCRIPT模式窗口中下载文件无法接收iframe的流
2013/10/11 Javascript
JS获取IP、MAC和主机名的五种方法
2013/11/14 Javascript
jQuery入门介绍之基础知识
2015/01/13 Javascript
对Web开发中前端框架与前端类库的一些思考
2015/03/27 Javascript
jquery带有索引按钮且自动轮播切换特效代码分享
2015/09/15 Javascript
Vue数据驱动模拟实现3
2017/01/11 Javascript
百度地图JavascriptApi Marker平滑移动及车头指向行径方向
2017/03/13 Javascript
清空元素html(&quot;&quot;) innerHTML=&quot;&quot; 与 empty()的区别和应用(推荐)
2017/08/14 Javascript
微信小程序实战篇之购物车的实现代码示例
2017/11/30 Javascript
浅谈用Webpack路径压缩图片上传尺寸获取的问题
2018/02/22 Javascript
NodeJS有难度的面试题(能答对几个)
2019/10/09 NodeJs
Python实现端口复用实例代码
2014/07/03 Python
对于Python的框架中一些会话程序的管理
2015/04/20 Python
解决pycharm每次新建项目都要重新安装一些第三方库的问题
2019/01/17 Python
Django配置MySQL数据库的完整步骤
2019/09/07 Python
泰国折扣酒店预订:Hotels2Thailand
2018/03/20 全球购物
怎样写好自我评价呢?
2014/02/16 职场文书
会计人员岗位职责
2014/03/19 职场文书
幼儿园教师考核评语
2014/12/31 职场文书
土地租赁协议书
2015/01/29 职场文书
污水处理保证书
2015/05/09 职场文书
水浒传读书笔记
2015/06/25 职场文书
2015质检员个人年终工作总结
2015/10/23 职场文书
2016廉洁从业学习心得体会
2016/01/19 职场文书
spring注解 @PropertySource配置数据源全流程
2022/03/25 Java/Android