解决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 相关文章推荐
Opacity.js
Jan 22 Javascript
javascript操作文本框readOnly
May 15 Javascript
AlertBox 弹出层信息提示框效果实现步骤
Oct 11 Javascript
Jquery图形报表插件 jqplot简介及参数详解
Oct 10 Javascript
javascript中传统事件与现代事件
Jun 23 Javascript
详解JavaScript函数对象
Nov 15 Javascript
jquery动态切换背景图片的简单实现方法
May 14 Javascript
高效Web开发的10个jQuery代码片段
Jul 22 Javascript
JS中关于事件处理函数名后面是否带括号的问题
Nov 16 Javascript
微信小程序 弹幕功能简单实例
Feb 14 Javascript
webpack-mvc 传统多页面组件化开发详解
May 07 Javascript
JavaScript实现跟随鼠标移动的盒子
Jan 28 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
DC这些乐高系列动画电影你看过几部?
2020/04/09 欧美动漫
解析php取整的几种方式
2013/06/25 PHP
基于jquery的web页面日期格式化插件
2011/11/15 Javascript
JS+CSS实现可拖动的弹出提示框
2015/02/16 Javascript
nodeJS代码实现计算交社保是否合适
2015/03/09 NodeJs
JS实现网页表格自动变大缩小的方法
2015/03/09 Javascript
jquery+html5时钟特效代码分享(可设置闹钟并且语音提醒)
2020/03/30 Javascript
jQuery实现的多滑动门,多选项卡效果代码
2016/03/28 Javascript
JavaScript自定义函数实现查找两个字符串最长公共子串的方法
2016/11/24 Javascript
vue2.0嵌套路由实现豆瓣电影分页功能(附demo)
2017/03/13 Javascript
JavaScript使用原型和原型链实现对象继承的方法详解
2017/04/05 Javascript
nodejs获取微信小程序带参数二维码实现代码
2017/04/12 NodeJs
Javascript操作dom对象之select全面解析
2017/04/24 Javascript
详解wow.js中各种特效对应的类名
2017/09/13 Javascript
React如何利用相对于根目录进行引用组件详解
2017/10/09 Javascript
详解创建自定义的Angular Schematics
2018/06/06 Javascript
Vue中的v-for循环key属性注意事项小结
2018/08/12 Javascript
9102年webpack4搭建vue项目的方法步骤
2019/02/20 Javascript
在mpvue框架中使用Vant WeappUI组件库的注意事项【推进】
2019/06/09 Javascript
React传值 组件传值 之间的关系详解
2019/08/26 Javascript
JavaScript多种滤镜算法实现代码实例
2019/12/10 Javascript
Python3基础之list列表实例解析
2014/08/13 Python
python 中的divmod数字处理函数浅析
2017/10/17 Python
Python对象转换为json的方法步骤
2019/04/25 Python
Django为窗体加上防机器人的验证码功能过程解析
2019/08/14 Python
用Python将Excel数据导入到SQL Server的例子
2019/08/24 Python
python+jinja2实现接口数据批量生成工具
2019/08/28 Python
python处理document文档保留原样式
2019/09/23 Python
Win下PyInstaller 安装和使用教程
2019/12/25 Python
ESDlife健康生活易:身体检查预订、搜寻及比较
2019/05/10 全球购物
英国森林假期:Forest Holidays
2021/01/01 全球购物
文员岗位职责
2013/11/09 职场文书
《两只鸟蛋》教学反思
2014/02/10 职场文书
节水口号标语
2014/06/19 职场文书
综治维稳工作承诺书
2014/08/30 职场文书
党员贯彻十八大精神思想汇报范文
2014/10/25 职场文书