脚本之家

电脑版
提示:原网页已由神马搜索转码, 内容由www.jb51.net提供.
您的位置:首页网络编程JavaScriptjavascript类库vue.js→ vuex mapState

vuex中mapState思想应用

  更新时间:2021年10月09日 14:10:20  作者:彭博 
这篇文章主要分享vuex中mapState思想及应用,在需求开发过程中,有的接口返回的结果中有很多字段需要展示到页面上。通常可以将这些字段在.vue文件中封装为计算属性,或者重新将对应字段赋值到 data 中的字段来达到便于使用的目的,具体内容,我们一起来看下面文章内容吧

背景:

在需求开发过程中,有的接口返回的结果中有很多字段需要展示到页面上。通常可以将这些字段在.vue文件中封装为计算属性,或者重新将对应字段赋值到 data 中的字段来达到便于使用的目的。如下:

computed(){
count1(){
return this.targetObj.count1
},
count2(){
return this.targetObj.count2
},
// ...
// 想象一下。你要写 5 遍 或者 10 遍类似的代码
}

但是不管哪种方法,都会带来大量的代码冗余,极为难受。为解决这种现象,本文借用了使用了vuex map 方法的思想,极大的缩减了冗余代码,并且能够对数据获取做统一的容错处理。

1、map方法

vuex 中基本的 state 提取使用方法,可通过 以下方式:

computed(){
count(){
return this.$store.count
}
}

同时 vuex 也同样注意到了问题,当 store 中要获取的数据很多时,这种方式将会产生极大的代码冗余,重复代码遍地走。你将会看到大量的计算属性的定义,以及长链路的对象属性提取。因此vuex 定义了一种 map 方法,用来批量的获取 store 中的指定数据。
这种 map 方法实际上就是一种 工厂函数(高阶函数),用来生产特定形式的函数。以下是源码,可以看到,mapState 其实最终会返回一个对象 res, res中的每个属性都是一个方法,而这个方法返回 state 中的值。

  var mapState = normalizeNamespace(function (namespace, states) {
// 定义一个对象 用于存储 获取指定属性的方法
var res = {};
normalizeMap(states).forEach(function (ref) {
var key = ref.key;
var val = ref.val;
// 定义 获取指定对象中指定属性的方法
res[key] = function mappedState () {
var state = this.$store.state;
var getters = this.$store.getters;
// 根据 namespace 查找指定的 store 模块对象
if (namespace) {
var module = getModuleByNamespace(this.$store, 'mapState', namespace);
if (!module) {
return
}
state = module.context.state;
getters = module.context.getters;
}
// 获取通过指定 namespace 得到的 store module 中的属性
return typeof val === 'function'
? val.call(this, state, getters)
: state[val]
};
});
// 返回 函数对象
return res
});

2、应用

仿照这种思想,可以对某个复杂对象中的字段的获取方式进行优化。定义的工厂函数如下所示

export const mapTargetValue = (nameSpace, keyList = [])=>{
const result = {}
// 注意:返回的方法不要使用箭头函数,否则拿不到 this
// 这里 可以兼容两种形式的 keyList ,参考 mapState 中属性重命名的使用形式
if(Array.isArray(keyList)){
keyList.forEach( key => result[key] = function(){
// 这里假设 可以直接在 this 上 获取得到 namespace对象
// 当然 指定对象的获取复杂程度取决于 你的代码逻辑
return this[nameSpace][key] || 0
})
}else if(typeof keyList === 'object' && keyList){
for(let key in keyList){
result[keyList[key]] = function(){ return this[nameSpace][key] || 0}
}
}
return result
}

定义的该方法使用方式与 mapState 使用方式完全一致。与之前的取值方式相比,可大大缩减重复代码量。具体应用如下

computed: {
...mapTargetValue("targetObj", ["count1", "count2"]),
...mapTargetValue("targetObj", { count1: "count3", count2: "count4"}),
}

到此这篇关于vuex中mapState思想应用的文章就介绍到这了,更多相关vuex mapState内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

    • 这篇文章主要给大家介绍了关于Vue的组件中data选项为什么必须是函数的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用Vue具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
      2020-08-08
    • 这篇文章主要介绍了vue-router路由模式详解(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
      2019-08-08
    • 这篇文章主要介绍了Vue3中Element Plus Table(表格)点击获取对应id方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
      2023-10-10
    • 这篇文章主要介绍了Vue 3.0 前瞻Vue Function API新特性体验,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
      2019-08-08
    • 这篇文章主要介绍了配置vite.confgi.ts无法使用require问题以及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
      2023-05-05
    • 侦听器和计算属性都可以用于侦听响应式数据的变化,如果需要在数据变化后执行操作,修改依赖项,那么就应该使用侦听器,下面就跟随小编一起来学习一下vue3中侦听器的使用吧
      2023-09-09
    • 这篇文章主要介绍了vue中的.sync修饰符用法及原理分析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
      2022-04-04
    • 这篇文章主要介绍了Vue中如何处理token过期问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
      2022-10-10
    • 本篇文章给大家分享了关于Vue多系统切换实现的解决方案,对此有需要的朋友可以跟着参考学习下。
      2018-06-06
    • 这篇文章主要介绍了如何解决公共组件父子组件依赖调用和子组件校验父组件条件的问题,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
      2022-10-10

    最新评论