Vuex入门(2)—— state,mapState,…mapState对象展开符详解

Vuex入门(2)—— state,mapState,…mapState对象展开符详解上一章大概说明了 vuex 的设计初衷和基本用法 从这一章开始详解一下 vuex 的几个关键配置 1 statestate 是什么 定义 state vuex data vue vuex 的 state 和 vue 的 data 有很多相似之处 都是用于存储一些数据 或者说状态值 这些值都将被挂载数据和 dom 的双向绑定事件 也就是当你改变值的时候可以触发 dom 的更新 虽然

  上一章大概说明了vuex的设计初衷和基本用法,从这一章开始详解一下vuex的几个关键配置.

1.state

  state是什么?

  定义:state(vuex) ≈ data (vue)

  vuex的state和vue的data有很多相似之处,都是用于存储一些数据,或者说状态值.这些值都将被挂载 数据和dom的双向绑定事件,也就是当你改变值的时候可以触发dom的更新.

  虽然state和data有很多相似之处,但state在使用的时候一般被挂载到子组件的computed计算属性上,这样有利于state的值发生改变的时候及时响应给子组件.如果你用data去接收$store.state,当然可以接收到值,但由于这只是一个简单的赋值操作,因此state中的状态改变的时候不能被vue中的data监听到,当然你也可以通过watch $store去解决这个问题,那你可以针是一个杠精

  综上所述,请用computed去接收state,如下

//state.js let state = { count: 1, name: 'dkr', sex: '男', from: 'china' } export default state 
 
   

结果如下,用data接收的值不能及时响应更新,用computed就可以.

Vuex入门(2)—— state,mapState,...mapState对象展开符详解

 

2.mapState 辅助函数

  mapState是什么?

  表面意思:mapState是state的辅助函数.这么说可能很难理解

  抽象形容:mapState是state的语法糖,这么说可能你还想骂我,因为你根本不了解什么叫做语法糖,事实上我说的语法糖有自己的定义,什么是语法糖?我对语法糖的理解就是,用之前觉得,我明明已经对一种操作很熟练了,并且这种操作也不存在什么问题,为什么要用所谓的”更好的操作”,用了一段时间后,真香!

 Vuex入门(2)—— state,mapState,...mapState对象展开符详解

  实际作用:当一个组件需要获取多个状态时候,将这些状态都声明为计算属性会有些重复和冗余。为了解决这个问题,我们可以使用 mapState 辅助函数帮助我们生成计算属性,让你少按几次键

  在使用mapState之前,要导入这个辅助函数.

import { mapState } from 'vuex'

  然后就是使用方式了

 

 
    

  在使用的时候,computed接收mapState函数的返回值,你可以用三种方式去接收store中的值,具体可以看注释.

  事实上第二种和第三种是同一种,只是前者用了ES6的偷懒语法,箭头函数,在偷懒的时候要注意一个问题,this指针的指向问题,我已经在很多篇文章中提到不要在vue中为了偷懒使用箭头函数,会导致很多很难察觉的错误,如果你在用到state的同时还需要借助当前vue实例的this,请务必使用常规写法.

  当然computed不会因为引入mapState辅助函数而失去原有的功能—用于扩展当前vue的data,只是写法会有一些奇怪,如果你已经写了一大堆的computed计算属性,做了一半发现你要引入vuex,还想使用mapState辅助函数的方便,你可以需要做下列事情.

//之前的computed computed:{ fn1(){ return ...}, fn2(){ return ...}, fn3(){ return ...} ........ } //引入mapState辅助函数之后 computed:mapState({ //先复制粘贴 fn1(){ return ...}, fn2(){ return ...}, fn3(){ return ...} ...... //再维护vuex count:'count' ....... })

   从上述写法可以看出来,这不符合代码的某些说不明道不清的特性,我们希望我们可以不用去做一些复制粘贴的无用操作,而是直接使用mapState,希望它能自动融入到当前生产环境中,ok,ES6+(或者说ES7)提供了这个方便.

3 …mapState

  事实上…mapState并不是mapState的扩展,而是…对象展开符的扩展.当然如果你把他用在这里会发现他能使得代码看起来变得,更加符合常规逻辑了,为什么这么说,你等下就会知道了.

  首先,来回顾一下…对象展开符在数组中的表现,这在ES6语法学习分类里有相关说明,如果有兴趣可以关注我的ES6分类中的文章.

let arr = [1,2,3] console.log(...arr) //1,2,3

 然后来看一个例子.

let MapState = mapState({ count: 'count', sex: (state) => state.sex }) let json = { 'a': '我是json自带的', ...MapState } console.log(json)

这里的json可以成功将mapState return的json格式,和json自带的a属性成功融合成一个新的对象.你可以将这个称为对象混合

这样,你就可以自由的使用mapState了.

//之前的computed computed:{ fn1(){ return ...}, fn2(){ return ...}, fn3(){ return ...} ........ } //引入mapState辅助函数之后 computed:{ //原来的继续保留 fn1(){ return ...}, fn2(){ return ...}, fn3(){ return ...} ...... //再维护vuex ...mapState({ //这里的...不是省略号了,是对象扩展符 count:'count' }) }

 

觉得文章有帮到你的py求你别关注了,求你点赞或者收藏吧,实在觉得好的话评论区骂我两句也行,谢谢了昂~

对博主感兴趣的童鞋可以扫描左侧二维码,也可以添加博主粉丝群,欢迎女粉加入~

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/215653.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午1:45
下一篇 2026年3月18日 下午1:45


相关推荐

  • 如何利用腾讯云服务器搭建个人网站[通俗易懂]

    如何利用腾讯云服务器搭建个人网站[通俗易懂]你是否想要搭建一个网站,却苦苦找不到方法,你是否看到别人搭建的网站,自己羡慕不已,今天,就教大家来搭建一个简单的个人网站。在这里,我采用的是腾讯云服务器搭建的。首先,需要注册腾讯云账号,登录腾讯云,点击控制台进入控制台后,选择域名注册看到的结果如下图所示:开始注册域名:提交订单后,域名就注册成功了。接下来需要购买云主机(云服务器),流程如下用…

    2022年6月29日
    48
  • uva 714 – Copying Books(贪心 最大值最小化 二分)

    uva 714 – Copying Books(贪心 最大值最小化 二分)

    2021年12月2日
    58
  • Slurm基本用法(入门必看)

    本文描述Linux集群的基本Slurm用法。1.一个简单的Slurm脚本$catslurm-job.sh#!/usr/bin/envbash#SBATCH-oslurm.sh.out#SBATCH-pdefqecho”Inthedirectory:`pwd`”echo”Astheuser:`whoami`”echo”writethis…

    2022年4月3日
    562
  • 在vue3 中使用echarts

    在vue3 中使用echarts1,安装echartsnpminstallecharts–save有cnpm的可以cnpm安装2,在main.js中导入import{createApp}from’vue’importAppfrom’./App.vue’import*asechartsfrom’echarts’constapp=createApp(App).mount(‘#app’)app.echarts=echarts3,在需要使用的页面,定义div&lt

    2025年7月25日
    9
  • navicat 15.0.17版本激活码_最新在线免费激活

    (navicat 15.0.17版本激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~0…

    2022年3月28日
    156
  • 【spring】Spring事件监听器ApplicationListener的使用与源码分析

    【spring】Spring事件监听器ApplicationListener的使用与源码分析ApplicationEvent以及Listener是Spring为我们提供的一个事件监听、订阅的实现,内部实现原理是观察者设计模式,设计初衷也是为了系统业务逻辑之间的解耦,提高可扩展性以及可维护性。事件发布者并不需要考虑谁去监听,监听具体的实现内容是什么,发布者的工作只是为了发布事件而已。Spring提供的内置事件:ContextRefreshedEvent:容器刷新事件ContextStartedEvent:容器启动事件ContextStoppedEvent:容器停止事件ContextClo

    2025年6月30日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号