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 相关文章推荐
Ajax+Json 级联菜单实现代码
Oct 27 Javascript
iframe的父子窗口之间的对象相互调用基本用法
Sep 03 Javascript
JavaScript获取多个数组的交集简单实例
Nov 11 Javascript
js中Image对象以及对其预加载处理示例
Nov 20 Javascript
JS刷新当前页面的几种方法总结
Dec 24 Javascript
javascript 对象数组根据对象object key的值排序
Mar 09 Javascript
JS代码防止SQL注入的方法(超简单)
Apr 12 Javascript
Ztree新增角色和编辑角色回显问题的解决
Oct 25 Javascript
javascript兼容性(实例讲解)
Aug 15 Javascript
Vue微信项目按需授权登录策略实践思路详解
May 07 Javascript
JavaScript基于面向对象实现的无缝滚动轮播示例
Jan 17 Javascript
小程序实现筛子抽奖
May 26 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实现搜索相似图片
2015/09/22 PHP
PHP 实现字符串翻转(包含中文汉字)的实现代码
2017/04/01 PHP
PHP receiveMail实现收邮件功能
2018/04/25 PHP
Laravel中为什么不使用blpop取队列详析
2018/08/01 PHP
Aster vs KG BO3 第三场2.19
2021/03/10 DOTA
Locate a File Using a File Open Dialog Box
2007/06/18 Javascript
JavaScript 事件参考手册
2008/12/24 Javascript
fckeditor 获取文本框值的实现代码
2009/02/09 Javascript
js 替换功能函数,用正则表达式解决,js的全部替换
2010/12/08 Javascript
javascript学习笔记(十四) window对象使用介绍
2012/06/20 Javascript
巧用js提交表单轻松解决一个页面有多个提交按钮
2013/11/17 Javascript
解决jquery操作checkbox火狐下第二次无法勾选问题
2014/02/10 Javascript
javascript实现动态模态绑定grid过程代码
2014/09/22 Javascript
JQuery实现动态添加删除评论的方法
2015/05/18 Javascript
JQuery validate插件Remote用法大全
2016/05/15 Javascript
详解Javascript中prototype属性(推荐)
2016/09/03 Javascript
解决Vue页面固定滚动位置的处理办法
2017/07/13 Javascript
Vue+Element使用富文本编辑器的示例代码
2017/08/14 Javascript
新手vue构建单页面应用实例代码
2017/09/18 Javascript
Vue+Vux项目实践完整代码
2017/11/30 Javascript
利用vue开发一个所谓的数独方法实例
2017/12/21 Javascript
Javascript实现一朵从含苞到绽放的玫瑰
2019/03/30 Javascript
node运行js获得输出的三种方式示例详解
2020/07/02 Javascript
[46:43]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第三局
2016/02/28 DOTA
Python实现的百度站长自动URL提交小工具
2014/06/27 Python
python写xml文件的操作实例
2014/10/05 Python
Python兔子毒药问题实例分析
2015/03/05 Python
Python中的字符串操作和编码Unicode详解
2017/01/18 Python
Python实现的人工神经网络算法示例【基于反向传播算法】
2017/11/11 Python
对python:print打印时加u的含义详解
2018/12/15 Python
python实现淘宝秒杀脚本
2020/06/23 Python
医大实习自我鉴定
2013/12/07 职场文书
2014端午节活动策划方案
2014/01/27 职场文书
社会实践评语
2014/04/28 职场文书
辅导员评语
2014/05/04 职场文书
防震减灾主题班会
2015/08/14 职场文书