详解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.ajax传递中文参数的解决方法 推荐
Mar 28 Javascript
yepnope.js 异步加载资源文件
Sep 08 Javascript
Web Inspector:关于在 Sublime Text 中调试Js的介绍
Apr 18 Javascript
将input file的选择的文件清空的两种解决方案
Oct 21 Javascript
使用纯javascript实现放大镜效果
Mar 18 Javascript
Javascript简单实现面向对象编程继承实例代码
Nov 27 Javascript
js实现继承的5种方式
Dec 01 Javascript
jQuery简单实现遍历单选框的方法
Mar 06 Javascript
VUE axios发送跨域请求需要注意的问题
Jul 06 Javascript
vue表单验证你真的会了吗?vue表单验证(form)validate
Apr 07 Javascript
微信小程序表单验证插件WxValidate的二次封装功能(终极版)
Sep 03 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代码
2012/07/14 PHP
php页面,mysql数据库转utf-8乱码,utf-8编码问题总结
2015/08/27 PHP
php递归函数怎么用才有效
2018/02/24 PHP
小程序微信支付功能配置方法示例详解【基于thinkPHP】
2019/05/05 PHP
jquery分页插件AmSetPager(自写)
2013/04/15 Javascript
JQuery 获取json数据$.getJSON方法的实例代码
2013/08/02 Javascript
利用JQuery制作符合Web标准的QQ弹出消息
2014/01/14 Javascript
js 获取、清空input type="file"的值示例代码
2014/02/19 Javascript
DOM基础教程之使用DOM控制表格
2015/01/20 Javascript
微信页面倒计时代码(解决safari不兼容date的问题)
2016/12/13 Javascript
js实现简单的选项卡效果
2017/02/23 Javascript
JavaScript正则替换HTML标签功能示例
2017/03/02 Javascript
vue2.0获取自定义属性的值
2017/03/28 Javascript
python爬取安居客二手房网站数据(实例讲解)
2017/10/19 Javascript
基于vue配置axios的方法步骤
2017/11/09 Javascript
Mac中安装nvm的教程分享
2017/12/11 Javascript
详解javascript常用工具类的封装
2018/01/30 Javascript
vue-image-crop基于Vue的移动端图片裁剪组件示例
2018/08/28 Javascript
Vue之Mixins(混入)的使用方法
2019/09/24 Javascript
Python3的介绍、安装和命令行的认识(推荐)
2018/10/20 Python
django drf框架自带的路由及最简化的视图
2019/09/10 Python
python使用pip安装SciPy、SymPy、matplotlib教程
2019/11/20 Python
Pytorch DataLoader 变长数据处理方式
2020/01/08 Python
Pytest mark使用实例及原理解析
2020/02/22 Python
Python自动重新加载模块详解(autoreload module)
2020/04/01 Python
Python基于wordcloud及jieba实现中国地图词云图
2020/06/09 Python
Python+Dlib+Opencv实现人脸采集并表情判别功能的代码
2020/07/01 Python
python实现录音功能(可随时停止录音)
2020/10/26 Python
韩国现代百货官网:Hmall
2018/03/21 全球购物
delegate与普通函数的区别
2014/01/22 面试题
旅游管理专业生自荐信范文
2014/01/02 职场文书
初中体育教学反思
2014/01/14 职场文书
制药工程专业职业生涯规划范文
2014/03/10 职场文书
《青山处处埋忠骨》教学反思
2014/04/22 职场文书
幼儿教师暑期培训方案
2014/08/27 职场文书
开除通知书范本
2015/04/25 职场文书