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 相关文章推荐
关于viewport,Ext.panel和Ext.form.panel的关系
May 07 Javascript
JS在IE和FF下attachEvent,addEventListener学习笔记
Nov 26 Javascript
jquery制作漂亮的弹出层提示消息特效
Dec 23 Javascript
javascript实现显示和隐藏div方法汇总
Aug 14 Javascript
js实现网页图片延时加载 提升网页打开速度
Jan 26 Javascript
jQuery EasyUI中DataGird动态生成列的方法
Apr 05 Javascript
RequireJS使用注意细节
May 15 Javascript
JS中如何实现Laravel的route函数详解
Feb 12 Javascript
在javascript中,null>=0 为真,null==0却为假,null的值详解
Feb 22 Javascript
element-ui 的el-button组件中添加自定义颜色和图标的实现方法
Oct 26 Javascript
JS错误处理与调试操作实例分析
Apr 13 Javascript
vue自定义指令限制输入框输入值的步骤与完整代码
Aug 30 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版(5)
2006/10/09 PHP
PHP获取163、gmail、126等邮箱联系人地址【已测试2009.10.10】
2009/10/11 PHP
php中全局变量global的使用演示代码
2011/05/18 PHP
php设计模式 Mediator (中介者模式)
2011/06/26 PHP
检查用户名是否已在mysql中存在的php写法
2014/01/20 PHP
php格式化时间戳显示友好的时间实现思路及代码
2014/10/23 PHP
codeigniter发送邮件并打印调试信息的方法
2015/03/21 PHP
linux下为php添加iconv模块的方法
2016/02/28 PHP
PHP中的自动加载操作实现方法详解
2019/08/06 PHP
Laravel 6.2 中添加了可调用容器对象的方法
2019/10/22 PHP
javascript eval和JSON之间的联系
2009/12/31 Javascript
jquery下jstree简单应用 - v1.0
2011/04/14 Javascript
FireFox下XML对象转化成字符串的解决方法
2011/12/09 Javascript
event.currentTarget与event.target的区别介绍
2012/12/31 Javascript
实现React单页应用的方法详解
2016/08/02 Javascript
原生JS:Date对象全面解析
2016/09/06 Javascript
jQuery仿写百度百科的目录树
2017/01/03 Javascript
原生JS实现自定义滚动条效果
2020/10/27 Javascript
jQuery的时间datetime控件在AngularJs中的使用实例(分享)
2017/08/17 jQuery
微信小程序选择图片和放大预览图片功能
2017/11/02 Javascript
详解Vue改变数组中对象的属性不重新渲染View的解决方案
2018/09/21 Javascript
使用axios请求接口,几种content-type的区别详解
2019/10/29 Javascript
vue实现前端列表多条件筛选
2020/10/26 Javascript
[01:14]英雄,所敬略同——2018完美盛典宣传视频4K
2018/12/05 DOTA
Pyhton中单行和多行注释的使用方法及规范
2016/10/11 Python
Python实现对百度云的文件上传(实例讲解)
2017/10/21 Python
Django框架模板的使用方法示例
2019/05/25 Python
Python弹出输入框并获取输入值的实例
2019/06/18 Python
Python银行系统实战源码
2019/10/25 Python
如何基于Django实现上下文章跳转
2020/09/16 Python
CSS改变网页中鼠标选中文字背景颜色例子
2014/04/23 HTML / CSS
海外淘书首选:AbeBooks
2017/07/31 全球购物
自荐书模板
2013/12/19 职场文书
学校出纳员岗位职责
2014/03/18 职场文书
2014年教师业务学习材料
2014/05/12 职场文书
详解使用内网穿透工具Ngrok代理本地服务
2022/03/31 Servers