详解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 相关文章推荐
jquery+ashx无刷新GridView数据显示插件(实现分页、排序、过滤功能)
Apr 25 Javascript
jquery选择checked在ie8普通模式下的问题
Feb 12 Javascript
jquery插件冲突(jquery.noconflict)解决方法分享
Mar 20 Javascript
Node.js中调用mysql存储过程示例
Dec 20 Javascript
基于jQuery实现收缩展开功能
Mar 18 Javascript
Bootstrap模态框调用功能实现方法
Sep 19 Javascript
jquery自定义插件结合baiduTemplate.js实现异步刷新(附源码)
Dec 22 Javascript
JS实现发送短信验证后按钮倒计时功能(防止刷新倒计时失效)
Jul 07 Javascript
Cocos2d实现刮刮卡效果
Dec 20 Javascript
vue 获取视频时长的实例代码
Aug 20 Javascript
vue中的v-if和v-show的区别详解
Sep 01 Javascript
Jquery $.map使用方法实例详解
Sep 01 jQuery
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模拟HTTP认证
2006/10/09 PHP
PHP 程序授权验证开发思路
2009/07/09 PHP
php把session写入数据库示例
2014/02/26 PHP
PHP三元运算的2种写法代码实例
2014/05/12 PHP
ThinkPHP模板Switch标签用法示例
2014/06/30 PHP
初识PHP中的Swoole
2016/04/05 PHP
Laravel使用memcached缓存对文章增删改查进行优化的方法
2016/10/08 PHP
PHP优化之批量操作MySQL实例分析
2020/04/23 PHP
range 标准化之获取
2011/08/28 Javascript
js的Prototype属性解释及常用方法
2014/05/08 Javascript
JavaScript用Number方法实现string转int
2014/05/13 Javascript
jQuery表单域属性过滤器用法分析
2015/02/10 Javascript
深入理解JavaScript系列(37):设计模式之享元模式详解
2015/03/04 Javascript
es6的数字处理的方法(5个)
2017/03/16 Javascript
微信小程序之swiper轮播图中的图片自适应高度的方法
2018/04/23 Javascript
在移动端使用vue-router和keep-alive的方法示例
2018/12/02 Javascript
jQuery实现条件搜索查询、实时取值及升降序排序的方法分析
2019/05/04 jQuery
详解wepy开发小程序踩过的坑(小结)
2019/05/22 Javascript
vue中echarts图表大小适应窗口大小且不需要刷新案例
2020/07/19 Javascript
Python 字典与字符串的互转实例
2017/01/13 Python
Python闭包的两个注意事项(推荐)
2017/03/20 Python
Python时间的精准正则匹配方法分析
2017/08/17 Python
基于随机梯度下降的矩阵分解推荐算法(python)
2018/08/31 Python
Python绘制频率分布直方图的示例
2019/07/08 Python
利用python实现周期财务统计可视化
2019/08/25 Python
将python2.7添加进64位系统的注册表方式
2019/11/20 Python
美体小铺奥地利官方网站:The Body Shop奥地利
2019/04/11 全球购物
Perfume’s Club意大利官网:欧洲美妆电商
2019/05/03 全球购物
DOM和JQuery对象有什么区别
2016/11/11 面试题
Servlet的实例是在生命周期什么时候创建的?配置servlet最重要的是什么?
2012/05/30 面试题
中职应届生会计求职信
2013/10/23 职场文书
2014光棍节大学生联谊活动方案
2014/10/10 职场文书
房地产销售主管岗位职责
2015/02/13 职场文书
向雷锋同志学习倡议书
2015/04/27 职场文书
python引入其他文件夹下的py文件具体方法
2021/05/23 Python
python for循环赋值问题
2021/06/03 Python