详解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系列之数值计算
Jun 07 Javascript
火狐textarea输入法的bug的触发及解决
Jul 24 Javascript
JavaScript加入收藏夹功能(兼容IE、firefox、chrome)
May 05 Javascript
基于iframe实现类似于ajax的页面无刷新
May 31 Javascript
AngularJS入门教程之过滤器详解
Aug 19 Javascript
Vue应用部署到服务器的正确方式
Jul 15 Javascript
EasyUI在Panel上动态添加LinkButton按钮
Aug 11 Javascript
AngularJS实现图片上传和预览功能的方法分析
Nov 08 Javascript
vue自定义全局组件(自定义插件)的用法
Jan 30 Javascript
JavaScript+H5实现微信摇一摇功能
May 23 Javascript
jquery 通过ajax请求获取后台数据显示在表格上的方法
Aug 08 jQuery
Vue axios获取token临时令牌封装案例
Sep 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插件Xajax使用方法详解
2017/08/31 PHP
JS的数组的扩展实例代码
2008/07/09 Javascript
Javascript 检测、添加、移除样式(className)函数代码
2009/09/08 Javascript
面向对象的Javascript之二(接口实现介绍)
2012/01/27 Javascript
加随机数引入脚本不让浏览器读取缓存
2014/09/04 Javascript
jquery不常用方法汇总
2015/07/26 Javascript
详解AngularJS中自定义过滤器
2015/12/28 Javascript
jQuery实现每隔几条元素增加1条线的方法
2016/06/27 Javascript
js正则表达式注册页面表单验证
2016/10/11 Javascript
Angular.js自定义指令学习笔记实例
2017/02/24 Javascript
常用的js方法合集
2017/03/10 Javascript
bootstrap fileinput组件整合Springmvc上传图片到本地磁盘
2017/05/11 Javascript
JQuery Ajax 异步操作之动态添加节点功能
2017/05/24 jQuery
JS原生带小白点轮播图实例讲解
2017/07/22 Javascript
Vue利用路由钩子token过期后跳转到登录页的实例
2017/10/26 Javascript
Bootstrap table使用方法汇总
2017/11/17 Javascript
Angular搜索场景中使用rxjs的操作符处理思路
2018/05/30 Javascript
vue基础之v-bind属性、class和style用法分析
2019/03/11 Javascript
浅谈Vue.js 关于页面加载完成后执行一个方法的问题
2019/04/01 Javascript
element-ui 远程搜索组件el-select在项目中组件化的实现代码
2019/12/04 Javascript
解决Linux系统中python matplotlib画图的中文显示问题
2017/06/15 Python
python paramiko模块学习分享
2017/08/23 Python
Python机器学习之K-Means聚类实现详解
2018/02/22 Python
Pycharm代码无法复制,无法选中删除,无法编辑的解决方法
2018/10/22 Python
使用python批量化音乐文件格式转换的实例
2019/01/09 Python
将tensorflow.Variable中的某些元素取出组成一个新的矩阵示例
2020/01/04 Python
python如何运行js语句
2020/09/09 Python
用HTML5制作一个简单的桌球游戏的教程
2015/05/12 HTML / CSS
寻找完美的房车租赁:RVShare
2019/02/23 全球购物
神话般的珠宝:Ross-Simons
2020/07/13 全球购物
五十岁生日宴会答谢词
2014/01/15 职场文书
员工三分钟演讲稿
2014/08/19 职场文书
幼儿园教师节感谢信
2015/01/23 职场文书
2016年禁毒宣传活动总结
2016/04/05 职场文书
Python-typing: 类型标注与支持 Any类型详解
2021/05/10 Python
用Python将GIF动图分解成多张静态图片
2021/06/11 Python