解决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 相关文章推荐
Json实现异步请求提交评论无需跳转其他页面
Oct 11 Javascript
JavaScript的内存释放问题详解
Jan 21 Javascript
教你如何使用firebug调试功能了解javascript闭包和this
Mar 04 Javascript
ES6新特性三: Generator(生成器)函数详解
Apr 21 Javascript
微信扫码支付零云插件版实例详解
Apr 26 Javascript
在Vue项目中使用d3.js的实例代码
May 01 Javascript
MVVM框架下实现分页功能示例
Jun 14 Javascript
js实现简单分页导航栏效果
Jun 28 Javascript
Vue实现购物车详情页面的方法
Aug 20 Javascript
Vue.js组件使用props传递数据的方法
Oct 19 Javascript
原生js实现瀑布流效果
Mar 09 Javascript
基于JS实现视频上传显示进度条
May 12 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代码限制国内IP访问我们网站
2015/09/26 PHP
zend框架实现支持sql server的操作方法
2016/12/08 PHP
PHP实现模拟http请求的方法分析
2017/12/20 PHP
javascript 原型继承介绍
2011/08/30 Javascript
JavaScript的作用域和块级作用域概念理解
2014/09/21 Javascript
JavaScript阻止浏览器返回按钮的方法
2015/03/18 Javascript
jQuery基于ajax实现星星评论代码
2015/08/07 Javascript
JavaScript 数组some()和filter()的用法及区别
2016/05/20 Javascript
jquery计算出left和top,让一个div水平垂直居中的简单实例
2016/07/13 Javascript
响应式表格之固定表头的简单实现
2016/08/26 Javascript
js/jq仿window文件夹框选操作插件
2017/03/08 Javascript
JavaScript 字符串数字左补位,右补位,取固定长度,截位扩展函数代码
2017/03/25 Javascript
Angular使用Md5加密的解决方法
2017/09/16 Javascript
JS控制鼠标拒绝点击某一按钮的实例
2017/12/29 Javascript
vue watch监听对象及对应值的变化详解
2018/02/24 Javascript
javascript实现异形滚动轮播
2019/11/28 Javascript
Jquery滑动门/tab切换实现方法完整示例
2020/06/05 jQuery
Vue 实现一个简单的鼠标拖拽滚动效果插件
2020/12/10 Vue.js
python 解析html之BeautifulSoup
2009/07/07 Python
Python中最常用的操作列表的几种方法归纳
2015/04/24 Python
安装python时MySQLdb报错的问题描述及解决方法
2018/03/20 Python
python库lxml在linux和WIN系统下的安装
2018/06/24 Python
Python 加密与解密小结
2018/12/06 Python
django中forms组件的使用与注意
2019/07/08 Python
Python 生成器,迭代,yield关键字,send()传参给yield语句操作示例
2019/10/12 Python
Python super()方法原理详解
2020/03/31 Python
python+adb命令实现自动刷视频脚本案例
2020/04/23 Python
Python爬虫JSON及JSONPath运行原理详解
2020/06/04 Python
用python对oracle进行简单性能测试
2020/12/05 Python
HTML5印章绘制电子签章图片(中文英文椭圆章、中文英文椭圆印章)
2019/06/03 HTML / CSS
聪明的粉丝购买门票的地方:TickPick
2018/03/09 全球购物
COACH德国官方网站:纽约现代奢侈品牌,1941年
2018/06/09 全球购物
给实习单位的感谢信
2014/02/01 职场文书
学雷锋倡议书
2015/01/19 职场文书
夫妻吵架保证书
2015/05/08 职场文书
python引入其他文件夹下的py文件具体方法
2021/05/23 Python