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移动div层-javascript 拖动层
Mar 22 Javascript
IE浏览器打印的页眉页脚设置解决方法
Dec 08 Javascript
js中的preventDefault与stopPropagation详解
Jan 29 Javascript
jquery自动填充勾选框即把勾选框打上true
Mar 24 Javascript
一个不错的仿携程自定义数据下拉选择select
Sep 01 Javascript
director.js实现前端路由使用实例
Feb 03 Javascript
谈谈对offsetleft兼容性的理解
Nov 11 Javascript
javascript中tostring()和valueof()的用法及两者的区别
Nov 16 Javascript
jQuery Masonry瀑布流插件使用方法详解
Jan 18 Javascript
微信小程序之多列表的显示和隐藏功能【附源码】
Aug 06 Javascript
优化Vue中date format的性能详解
Jan 13 Javascript
Vue的生命周期一起来看看
Feb 24 Vue.js
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编写一个简单的路由类
2011/04/13 PHP
rephactor 优秀的PHP的重构工具
2011/06/09 PHP
浅析使用Turck-mmcache编译来加速、优化PHP代码
2013/06/20 PHP
php导入导出excel实例
2013/10/25 PHP
php检测useragent版本示例
2014/03/24 PHP
ASP和PHP实现生成网站快捷方式并下载到桌面的方法
2014/05/08 PHP
PHP读取大文件的几种方法介绍
2016/10/27 PHP
Linux基于php-fpm模式的lamp搭建phpmyadmin的方法
2018/10/25 PHP
动态改变textbox的宽高的js
2006/10/26 Javascript
JavaScript入门教程(5) js Screen屏幕对象
2009/01/31 Javascript
JavaScript strike方法入门实例(给字符串加上删除线)
2014/10/17 Javascript
jQuery+AJAX实现网页无刷新上传
2015/02/22 Javascript
laypage分页控件使用实例详解
2016/05/19 Javascript
AngularJS 面试题集锦
2016/09/06 Javascript
jQuery实现右键菜单、遮罩等效果代码
2016/09/27 Javascript
vue引入jq插件的实例讲解
2017/09/12 Javascript
Thinkphp5微信小程序获取用户信息接口的实例详解
2017/09/26 Javascript
浅析Vue 生命周期
2018/06/21 Javascript
javascript中的数据类型检测方法详解
2019/08/07 Javascript
原生JS实现无缝轮播图片
2020/06/24 Javascript
Vue 解决通过this.$refs来获取DOM或者组件报错问题
2020/07/28 Javascript
一篇超完整的Vue新手入门指导教程
2020/11/18 Vue.js
[02:05]2014DOTA2国际邀请赛 BBC外卡赛赛后总结
2014/07/09 DOTA
Python实现基于权重的随机数2种方法
2015/04/28 Python
简单介绍Python2.x版本中的cmp()方法的使用
2015/05/20 Python
Python面向对象之反射/自省机制实例分析
2018/08/24 Python
python实现将中文日期转换为数字日期
2020/07/14 Python
Python中logging日志的四个等级和使用
2020/11/17 Python
opencv实现图像几何变换
2021/03/24 Python
幼儿园长自我鉴定
2013/10/17 职场文书
2014年计算机专业个人自我评价
2014/01/19 职场文书
创业计划书的写作技巧及要点
2014/01/31 职场文书
教师工作态度自我评价
2015/03/05 职场文书
2015年圣诞节活动总结
2015/03/24 职场文书
车间安全生产管理制度
2015/08/06 职场文书
导游词之麻姑仙境
2019/11/18 职场文书