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笔记一 js以及json基础使用说明
May 22 Javascript
js 创建书签小工具之理论
Feb 25 Javascript
js 手机号码合法性验证代码集合
Sep 29 Javascript
JS获取各种宽度、高度的简单介绍
Dec 19 Javascript
jQuery的end()方法使用详解
Jul 15 Javascript
JavaScript中Date对象的常用方法示例
Oct 24 Javascript
jQuery手动点击实现图片轮播特效
Apr 20 Javascript
JQuery给select添加/删除节点的实现代码
Apr 26 Javascript
使用BootStrap进行轮播图的制作
Jan 06 Javascript
JavaScript函数节流和函数防抖之间的区别
Feb 15 Javascript
Vue父子模版传值及组件传值的三种方法
Nov 27 Javascript
angularjs性能优化的方法
Sep 05 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读取msn上的用户信息类
2008/12/05 PHP
php将字符串转换成16进制的方法
2015/03/17 PHP
thinkPHP删除前弹出确认框的简单实现方法
2016/05/16 PHP
Mac系统下安装PHP Xdebug
2018/03/30 PHP
javascript[js]获取url参数的代码
2007/10/17 Javascript
获取下拉列表框的值是数组,split,$.inArray示例
2013/11/13 Javascript
JS动态添加与删除select中的Option对象(示例代码)
2013/12/20 Javascript
jquery实现的鼠标拖动排序Li或Table
2014/05/04 Javascript
JavaScript实现twitter puddles算法实例
2014/12/06 Javascript
AngularJS基础学习笔记之指令
2015/05/10 Javascript
鼠标经过子元素触发mouseout,mouseover事件的解决方案
2015/07/26 Javascript
创建基于Bootstrap的下拉菜单的DropDownList的JQuery插件
2016/06/02 Javascript
js实现动态显示时间效果
2017/03/06 Javascript
jsTree事件和交互以及插件plugins详解
2017/08/29 Javascript
js 倒计时(高效率服务器时间同步)
2017/09/12 Javascript
Bootstrap treeview实现动态加载数据并添加快捷搜索功能
2018/01/07 Javascript
vue使用iframe嵌入网页的示例代码
2020/06/09 Javascript
vue单页应用在页面刷新时保留状态数据的方法
2018/09/21 Javascript
Vue表单输入绑定的示例代码
2018/11/01 Javascript
Element-ui中元素滚动时el-option超出元素区域的问题
2019/05/30 Javascript
JS把字符串格式的时间转换成几秒前、几分钟前、几小时前、几天前等格式
2019/07/10 Javascript
关于Vue中axios的封装实例详解
2019/10/20 Javascript
详解钉钉小程序组件之自定义模态框(弹窗封装实现)
2020/03/07 Javascript
Python列表list数组array用法实例解析
2014/10/28 Python
python daemon守护进程实现
2016/08/27 Python
对Python 窗体(tkinter)文本编辑器(Text)详解
2018/10/11 Python
Python拼接字符串的7种方法总结
2018/11/01 Python
Python 使用 attrs 和 cattrs 实现面向对象编程的实践
2019/06/12 Python
在spyder IPython console中,运行代码加入参数的实例
2020/04/20 Python
python实现画图工具
2020/08/27 Python
智能旅行箱:Horizn Studios
2018/04/30 全球购物
美国摩托车头盔、零件、齿轮及配件商店:Cycle Gear
2019/06/12 全球购物
德国最大的婴儿用品网上商店:Kidsroom.de(支持中文)
2020/09/02 全球购物
医学生自我鉴定范文
2014/03/26 职场文书
课例研修方案
2014/05/31 职场文书
小学生思想品德评语
2014/12/31 职场文书