详解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 相关文章推荐
IE中jquery.form中ajax提交没反应解决方法分享
Sep 11 Javascript
jQuery隔行变色与普通JS写法的对比
Apr 21 Javascript
JS控制阿拉伯数字转为中文大写示例代码
Sep 04 Javascript
刷新页面的几种方法小结(JS,ASP.NET)
Jan 07 Javascript
jQuery函数map()和each()介绍及异同点分析
Nov 08 Javascript
Bootstrap教程JS插件滚动监听学习笔记分享
May 18 Javascript
Ajax实现不刷新取最新商品
Mar 01 Javascript
js实现瀑布流效果(自动生成新的内容)
Mar 16 Javascript
jQuery实现动态给table赋值的方法示例
Jul 04 jQuery
JS获取一个表单字段中多条数据并转化为json格式
Oct 17 Javascript
AngularJS select加载数据选中默认值的方法
Feb 28 Javascript
支付宝小程序自定义弹窗dialog插件的实现代码
Nov 30 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输出1000以内质数(素数)示例
2014/02/16 PHP
thinkPHP线上自动加载异常与修复方法实例分析
2016/12/01 PHP
微信推送功能实现方式图文详解
2019/07/12 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
2020/03/26 PHP
jQuery学习2 选择器的使用说明
2010/02/07 Javascript
让mayfish支持mysqli数据库驱动的实现方法
2010/05/22 Javascript
jquery增加时编辑jqGrid(实例代码)
2013/11/08 Javascript
弹出窗口并且此窗口带有半透明的遮罩层效果
2014/03/13 Javascript
Javascript基础知识(一)核心基础语法与事件模型
2014/09/29 Javascript
node.js中的buffer.write方法使用说明
2014/12/10 Javascript
Jquery使用小技巧汇总
2015/12/29 Javascript
面试常见的js算法题
2017/03/23 Javascript
详解在 Angular 项目中添加 clean-blog 模板
2017/07/04 Javascript
jQuery实现动态添加和删除input框实例代码
2019/03/26 jQuery
微信小程序和H5页面间相互跳转代码实例
2019/09/19 Javascript
使用JavaScrip模拟实现仿京东搜索框功能
2019/10/16 Javascript
[18:20]DOTA2 HEROS教学视频教你分分钟做大人-昆卡
2014/06/11 DOTA
Python内置的字符串处理函数整理
2013/01/29 Python
windows下python模拟鼠标点击和键盘输示例
2014/02/28 Python
Python的Django框架中settings文件的部署建议
2015/05/30 Python
python3 判断列表是一个空列表的方法
2018/05/04 Python
python实现手机销售管理系统
2019/03/19 Python
如何不用安装python就能在.NET里调用Python库
2019/07/12 Python
Python imageio读取视频并进行编解码详解
2019/12/10 Python
详解Python中namedtuple的使用
2020/04/27 Python
Python3爬虫里关于Splash负载均衡配置详解
2020/07/10 Python
CSS3 实现图形下落动画效果
2020/11/13 HTML / CSS
UGG澳洲官网:UGG Australia
2018/04/26 全球购物
Ajax的工作原理
2015/12/04 面试题
趣味游戏活动方案
2014/02/07 职场文书
2014社区三八妇女节活动总结
2014/03/01 职场文书
电视节目策划方案
2014/05/16 职场文书
2015小学教师年度工作总结
2015/05/12 职场文书
2016年八一建军节活动总结
2016/04/05 职场文书
python爬虫--selenium模块
2021/03/31 Python
OpenCV-Python直方图均衡化实现图像去雾
2021/06/07 Python