详解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 相关文章推荐
js 中{},[]中括号,大括号使用详解
May 12 Javascript
jquery实现简单的拖拽效果实例兼容所有主流浏览器(优化篇)
Jun 28 Javascript
JS关闭窗口或JS关闭页面的几种代码分享
Oct 25 Javascript
扩展IE中一些不兼容的方法如contains、startWith等等
Jan 09 Javascript
Jquery获取元素的父容器对象示例代码
Feb 10 Javascript
JavaScript中pop()方法的使用教程
Jun 09 Javascript
浅谈jQuery中height与width
Jul 06 Javascript
jQuery实现最简单的切换图效果【可兼容IE6、火狐、谷歌、opera等】
Sep 04 Javascript
Bootstrap对话框使用实例讲解
Sep 24 Javascript
js实现5秒倒计时重新发送短信功能
Feb 05 Javascript
Vue iview-admin框架二级菜单改为三级菜单的方法
Jul 03 Javascript
ES6字符串的扩展实例
Dec 21 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 FOR MYSQL 代码生成助手(根据Mysql里的字段自动生成类文件的)
2011/07/23 PHP
php解析http获取的json字符串变量总是空白null
2015/03/02 PHP
PHP使用strstr()函数获取指定字符串后所有字符的方法
2016/01/07 PHP
linux下php上传文件注意事项
2016/06/11 PHP
php 从指定数字中获取随机组合的简单方法(推荐)
2017/04/05 PHP
PHP编程计算文件或数组中单词出现频率的方法
2017/05/22 PHP
CodeIgniter框架数据库基本操作示例
2018/05/24 PHP
PHP封装请求类实例分析【基于Yii框架】
2019/10/17 PHP
Vagrant(WSL)+PHPStorm+Xdebu 断点调试环境搭建
2019/12/13 PHP
关于图片按比例自适应缩放的js代码
2011/10/30 Javascript
js post提交调用方法
2014/02/12 Javascript
jQuery判断数组是否包含了指定的元素
2015/03/10 Javascript
javascript基础知识
2016/06/07 Javascript
使用 Vue.js 仿百度搜索框的实例代码
2017/05/09 Javascript
js禁止浏览器页面后退功能的实例(推荐)
2017/09/01 Javascript
angular4中关于表单的校验示例
2017/10/16 Javascript
Angular2整合其他插件的方法
2018/01/20 Javascript
vue debug 二种方法
2018/09/16 Javascript
微信小程序 扭蛋抽奖机css3动画实现详解
2019/07/19 Javascript
vue.js 解决v-model让select默认选中不生效的问题
2020/07/28 Javascript
解决谷歌搜索技术文章时打不开网页问题的python脚本
2013/02/10 Python
Python+OpenCV实现将图像转换为二进制格式
2020/01/09 Python
django 读取图片到页面实例
2020/03/27 Python
python爬虫把url链接编码成gbk2312格式过程解析
2020/06/08 Python
Python小白垃圾回收机制入门
2020/06/09 Python
Python生成器generator原理及用法解析
2020/07/20 Python
工地安全检查制度
2014/02/04 职场文书
国旗下讲话演讲稿
2014/05/08 职场文书
活动总结报告格式
2014/05/09 职场文书
白血病捐款倡议书
2014/05/14 职场文书
群众路线自查自纠工作情况报告
2014/10/28 职场文书
护士长2014年度工作总结
2014/11/11 职场文书
爱牙日宣传活动总结
2015/02/05 职场文书
采购员工作总结范文
2015/08/12 职场文书
python 通过使用Yolact训练数据集
2021/04/06 Python
springboot利用redis、Redisson处理并发问题的操作
2021/06/18 Java/Android