详解vuex 中的 state 在组件中如何监听


Posted in Javascript onMay 23, 2017

前言

不知道大家有没有遇到过这样一种情况? vuex中的state会在某一个组建中使用,而这个状态的初始化是通过异步加载完成的。组件在渲染过程中,获取的state状态为空。也就是说组件在异步完成之前就已经完成渲染了,导致组件的数据没有来得及渲染。

问题举例

举例说明如下:

// topo.vue
created() {
  this.getUserAndSysIcons();
},
methods: {
  getUserAndSysIcons() {
    const self = this;
    // 用户图标
    iconApi.getUserIcons().then(response => {
    self.$store.dispatch('setUserIcons', response.data);
    });
  }
}

在topo.vue中created或者mounted完成的时候调用 getUserAndSysIcons() 异步初始化userIcons,方便在其他组件中使用这个数据。

// modifyhost.vue
mounted() {
  this.userIcons = this.$store.state.topo.userIcons; // 用户图标
}

在modifyhost.vue中渲染数据是,需要使用userIcons。在modifyhost.vue组件mounted完成的时候,userIcons数据还没有被初始化。导致modifyhost.vue渲染为空。

详解vuex 中的 state 在组件中如何监听

思考

想的是,当topo.vue中异步获取userIcons完成的时候,再去将modifyhost.vue组件中的userIcons初始化。这样就会自动改变完成渲染。那么怎么知道异步什么时候完成呢?

于是就想到了vue一个好东西watch监听,监听某一个数据的变化。我们都知道是,很容易监听组件中局部数据的变化。那么,这里怎么去监听state中的变化呢?于是有利用了computed计算属性。具体操作如下:

解决

在computed中写一个计算属性getUserIcons,返回状态管理中的userIcons。然后在watch中监听这个计算属性的变化,对modifyhost.vue中的userIcons重新赋值。

computed: {
  getUserIcons() {
    return this.$store.state.topo.userIcons;
  }
},
watch: {
  getUserIcons(val) {
    this.userIcons = val;
  }
}

最终效果

详解vuex 中的 state 在组件中如何监听

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 写类方式之五
Jul 05 Javascript
JQuery中对服务器控件 DropdownList, RadioButtonList, CheckboxList的操作总结
Jun 28 Javascript
js修改table中Td的值(定义td的单击事件)
Jan 10 Javascript
JS localStorage实现本地缓存的方法
Jun 22 Javascript
javascript获取select的当前值示例代码(兼容IE/Firefox/Opera/Chrome)
Dec 17 Javascript
JavaScript检查弹出窗口是否被阻拦的方法技巧
Mar 13 Javascript
php+ajax+jquery实现点击加载更多内容
May 03 Javascript
微信小程序注册60s倒计时功能 使用JS实现注册60s倒计时功能
Aug 16 Javascript
Vue添加请求拦截器及vue-resource 拦截器使用
Nov 23 Javascript
JavaScript根据json生成html表格的示例代码
Oct 24 Javascript
js+springMVC 提交数组数据到后台的实例
Sep 21 Javascript
使用Node.js实现base64和png文件相互转换的方法
Mar 11 Javascript
BootStrap表单控件之文本域textarea
May 23 #Javascript
BootStrap 表单控件之单选按钮水平排列
May 23 #Javascript
vue实现app页面切换动画效果实例
May 23 #Javascript
BootStrap表单控件之复选框checkbox和单选择按钮radio
May 23 #Javascript
JavaScript设置名字输入不合法的实现方法
May 23 #Javascript
node.js中express中间件body-parser的介绍与用法详解
May 23 #Javascript
微信小程序request出现400的问题解决办法
May 23 #Javascript
You might like
用PHP 4.2书写安全的脚本
2006/10/09 PHP
仿Aspnetpager的一个PHP分页类代码 附源码下载
2012/10/08 PHP
如何用php获取文件名后缀
2013/06/09 PHP
基于php和mysql的简单的dao类实现crud操作功能
2014/01/27 PHP
ThinkPHP自动转义存储富文本编辑器内容导致读取出错的解决方法
2014/08/08 PHP
PHP+iFrame实现页面无需刷新的异步文件上传
2014/09/16 PHP
PHP中如何使用Redis接管文件存储Session详解
2018/11/28 PHP
laravel 操作数据库常用函数的返回值方法
2019/10/11 PHP
几行代码轻松搞定jquery实现flash8类似的连接效果
2007/05/03 Javascript
基于jQuery的获得各种控件Value的方法
2010/11/19 Javascript
js编码之encodeURIComponent使用介绍(asp,php)
2012/03/01 Javascript
Extjs优化(一)删除冗余代码提高运行速度
2013/04/15 Javascript
jQuery(js)获取文字宽度(显示长度)示例代码
2013/12/31 Javascript
使用console进行性能测试
2015/04/27 Javascript
jQuery文字轮播特效
2017/02/12 Javascript
TypeScript中的方法重载详解
2019/04/12 Javascript
Node.js学习之内置模块fs用法示例
2020/01/22 Javascript
Vue中keep-alive组件的深入理解
2020/08/23 Javascript
解决Python出现_warn_unsafe_extraction问题的方法
2016/03/24 Python
python脚本实现数据导出excel格式的简单方法(推荐)
2016/12/30 Python
Python实现自定义顺序、排列写入数据到Excel的方法
2018/04/23 Python
python调用staf自动化框架的方法
2018/12/26 Python
Python字典常见操作实例小结【定义、添加、删除、遍历】
2019/10/25 Python
python中使用paramiko模块并实现远程连接服务器执行上传下载功能
2020/02/29 Python
python requests包的request()函数中的参数-params和data的区别介绍
2020/05/05 Python
html5的canvas方法使用指南
2014/12/15 HTML / CSS
UGG雪地靴德国官网:UGG德国
2016/11/19 全球购物
全球最大的游戏市场:G2A
2018/07/05 全球购物
美国在线艺术商店:HandmadePiece
2020/11/06 全球购物
自我鉴定的范文
2013/10/03 职场文书
技术总监岗位职责
2013/12/05 职场文书
党员干部民主生活会议批评与自我批评材料
2014/09/20 职场文书
优秀校长事迹材料
2014/12/24 职场文书
学前班幼儿评语大全
2014/12/29 职场文书
亚布力滑雪场导游词
2015/02/09 职场文书
《雪域豹影》读后感:父爱的伟大
2019/12/23 职场文书