Vuex 在Vue 组件中获得Vuex 状态state的方法


Posted in Javascript onAugust 27, 2018

Vuex使用单一状态树(一个对象就包含了全部的应用层级状态),它作为唯一数据源存在,每个应用仅仅有一个store实例。

单一状态树使得我们能够直接定位任一特定的状态片段,在调试过程中也能轻易地取得整个当前应用状态的快照。

在Vue组件中获得Vuex状态

Vuex的状态存储是相应式的。在Vue组件中获取Vuex状态总共有 五种 可行的方法。

1.从store实例中读取状态最简单的方法就是在计算属性中返回某个状态:(需要导入store组件)

const Counter={
 template:`<div>{{ count }}</div>`,
 computed:{
 count(){
  return store.state.count//返回store实例的count状态
 }
 }
}

每当store.state.count发生变化,都会重新求取计算属性,并且出发更新相关联的DOM

缺点:这种模式导致组件依赖全局状态单例。在每个需要state的组件中需要频繁地导入,并且在测试组件时需要模拟状态。

Vuex通过store选项,提供了一种机制将状态从根组件注入到每一个子组件中,前提是要调用Vue.use(Vuex)

const app=new Vue({
 el:'#app',
 store,//根组件通过store选项将store实例注入所有地子组件
 components:{ Counter },
 template:`
 <div class="app">
  <Counter><Counter>
 </div>
 `
})

上面的代码能够让子组件通过this.$store访问到store实例。

2.于是,Counter组件可以按照下面的实现来访问store,而不用频繁导入state的组件。

const Counter={
 template:`<div>{{ counter }}</div>`,
 computed:{
 count(){
  return this.$state.count
 }
 }
}

mapState辅助函数(用于获取多个state状态)

当一个组件需要获取多个状态的时候,将这些状态都声明为计算属性会有些重复和冗余(如上面代码的count函数),避免这个问题,

3.我们可以用mapState辅助函数帮助我们生成计算属性,让我们少敲几个健:

import { mapState } from 'vuex'
export default{
 computed:mapState({
 //方式一:箭头函数
 count:state => state.count,
 //方式二:传字符串参数
 countAlias:'count',
 //如果要使用this获取局部状态,就要使用常规函数了!
 countPlusLocalState(state){
 return state.count+this.localCount
 }
 })
}

4.如果映射的计算属性的名称与state的子节点相同时,我们给mapState传一个字符串数组。

computed:mapState([
 'count'
])

5.对象展开运算符

上面的3、4都是mapState单独使用在computed属性中,但是如果要和普通的局部计算属性混合使用的时候,我们用对象展开运算符(…)

import { mapState,mapGetter } from 'vuex'
export default{
 methods:{
 increment(){
  this.$store.commit('increment');
 }
 },
 computed:{
 elsecomputed(){},//这是普通的局部计算属性
 ...mapGetters([
  'count'
 ]),
 ...mapState({
  counts(){
   return this.$store.state.count;
  }
  }
 })
 }
}

并不需要把所有状态都放到Vuex,有些状态严格属于单个组件,最好是作为组件的局部状态,要根据应用开发进行权衡和确定。

以上这篇Vuex 在Vue 组件中获得Vuex 状态state的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
图片格式的JavaScript和CSS速查手册
Aug 20 Javascript
Jquery 最近浏览过的商品的功能实现代码
May 14 Javascript
jQuery中 noConflict() 方法使用
Apr 25 Javascript
一个不错的字符串转码解码函数(自写)
Jul 31 Javascript
JS动态加载当前时间的方法
Feb 09 Javascript
如何改进javascript代码的性能
Apr 02 Javascript
JavaScript实现打字效果的方法
Jul 10 Javascript
jQuery实现圣诞节礼物动画案例解析
Dec 25 Javascript
Express结合Webpack的全栈自动刷新
May 23 Javascript
使用VueRouter的addRoutes方法实现动态添加用户的权限路由
Jun 03 Javascript
vue 手机物理监听键+退出提示代码
Sep 09 Javascript
js闭包和垃圾回收机制示例详解
Mar 01 Javascript
JS实现匀速与减速缓慢运动的动画效果封装示例
Aug 27 #Javascript
vue展示dicom文件医疗系统的实现代码
Aug 27 #Javascript
vue中子组件的methods中获取到props中的值方法
Aug 27 #Javascript
最适应的vue.js的form提交涉及多种插件【推荐】
Aug 27 #Javascript
vue里面v-bind和Props 利用props绑定动态数据的方法
Aug 27 #Javascript
vue.js中toast用法及使用toast弹框的实例代码
Aug 27 #Javascript
对Vue- 动态元素属性及v-bind和v-model的区别详解
Aug 27 #Javascript
You might like
解析php利用正则表达式解决采集内容排版的问题
2013/06/20 PHP
PHP Cookei记录用户历史浏览信息的代码
2016/02/03 PHP
简单解决微信文章图片防盗链问题
2016/12/17 PHP
Laravel关联模型中过滤结果为空的结果集(has和with区别)
2018/10/18 PHP
Laravel框架实现的上传图片到七牛功能详解
2019/09/06 PHP
用Javascript实现锚点(Anchor)间平滑跳转
2009/09/08 Javascript
javascript encodeURI和encodeURIComponent的比较
2010/04/03 Javascript
IE6下出现JavaScript未结束的字符串常量错误的解决方法
2010/11/21 Javascript
MooTools 页面滚动浮动层智能定位实现代码
2011/08/23 Javascript
javascript利用控件对windows的操作实现原理与应用
2012/12/23 Javascript
js获取微信版本号的方法
2015/05/12 Javascript
Javascript页面跳转常见实现方式汇总
2015/11/28 Javascript
jQuery实现的纵向下拉菜单实例详解【附demo源码下载】
2016/07/09 Javascript
JavaScript 深层克隆对象详解及实例
2016/11/03 Javascript
vue引入ueditor及node后台配置详解
2018/01/03 Javascript
vue组件之间通信方式实例总结【8种方式】
2019/02/22 Javascript
vue element-ul实现展开和收起功能的实例代码
2020/11/25 Vue.js
[01:04:30]Fnatic vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
[46:14]完美世界DOTA2联赛PWL S3 Magma vs INK ICE 第一场 12.11
2020/12/16 DOTA
Python help()函数用法详解
2014/03/11 Python
python3使用urllib模块制作网络爬虫
2016/04/08 Python
利用Python生成文件md5校验值函数的方法
2017/01/10 Python
python操作mysql代码总结
2018/06/01 Python
在Python 字典中一键对应多个值的实例
2019/02/03 Python
详解python中__name__的意义以及作用
2019/08/07 Python
520使用Python实现“我爱你”表白
2020/05/20 Python
Python常用base64 md5 aes des crc32加密解密方法汇总
2020/11/06 Python
教你如何一步一步用Canvas写一个贪吃蛇
2018/10/22 HTML / CSS
HTML5的Video标签有部分MP4无法播放的问题解析(多图)
2017/08/18 HTML / CSS
益达广告词
2014/03/14 职场文书
绿色环保演讲稿
2014/05/10 职场文书
企业年度评优方案
2014/06/02 职场文书
生日庆典策划方案
2014/06/02 职场文书
安全知识竞赛主持词
2015/06/30 职场文书
Python办公自动化之教你用Python批量识别发票并录入到Excel表格中
2021/06/26 Python
解析MySQL索引的作用
2022/03/03 MySQL