详解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学习7 操作JavaScript对象和集合的函数
Feb 07 Javascript
老鱼 浅谈javascript面向对象编程
Mar 04 Javascript
js不完美解决click和dblclick事件冲突问题
Jul 16 Javascript
jQuery代码实现发展历程时间轴特效
Jul 30 Javascript
理解JS绑定事件
Jan 19 Javascript
jQuery与JS加载事件用法分析
Sep 04 Javascript
Bootstrap3 模态框使用实例
Feb 22 Javascript
基于JS脚本语言的基础语法详解
Jul 22 Javascript
JS实现倒计时图文效果
Nov 17 Javascript
angular6的table组件开发的实现示例
Dec 26 Javascript
js实现全选和全不选功能
Jul 28 Javascript
VUE前端从后台请求过来的数据进行转换数据结构操作
Nov 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
phpphp图片采集后按原路径保存图片示例
2014/02/18 PHP
php接口和抽象类使用示例详解
2014/03/02 PHP
PHP中的类型约束介绍
2015/05/11 PHP
微信公众号OAuth2.0网页授权问题浅析
2017/01/21 PHP
PHP 文件上传限制问题
2019/09/01 PHP
bcastr2.0 通用的图片浏览器
2006/11/22 Javascript
关于 byval 与 byref 的区别分析总结
2007/10/08 Javascript
JavaScript 定义function的三种方式小结
2009/10/16 Javascript
js 编程笔记 无名函数
2011/06/28 Javascript
JavaScript检测鼠标移动方向的方法
2015/05/22 Javascript
浅析四种常见的Javascript声明循环变量的书写方式
2015/10/14 Javascript
非常酷炫的Bootstrap图片轮播动画
2016/05/27 Javascript
Extjs让combobox写起来简洁又漂亮
2017/01/05 Javascript
AngularJS监听路由变化的方法
2017/03/07 Javascript
jQuery实现div跟随鼠标移动
2020/08/20 jQuery
详解nodejs异步I/O和事件循环
2017/06/07 NodeJs
微信小程序 拍照或从相册选取图片上传代码实例
2019/08/28 Javascript
关于layui表单中按钮自动提交的解决方法
2019/09/09 Javascript
[41:52]2018DOTA2亚洲邀请赛3月29日小组赛B组Effect VS Secret
2018/03/30 DOTA
浅谈Python中copy()方法的使用
2015/05/21 Python
python flask框架实现传数据到js的方法分析
2019/06/11 Python
使用Python实现文字转语音并生成wav文件的例子
2019/08/08 Python
利用pyecharts实现地图可视化的例子
2019/08/12 Python
Python Multiprocessing多进程 使用tqdm显示进度条的实现
2019/08/13 Python
解决pytorch报错:AssertionError: Invalid device id的问题
2020/01/10 Python
python利用线程实现多任务
2020/09/18 Python
python用opencv 图像傅里叶变换
2021/01/04 Python
使用canvas绘制贝塞尔曲线
2014/12/17 HTML / CSS
美国精品家居用品网站:US-Mattress
2016/08/24 全球购物
Fanatics法国官网:美国体育电商
2019/08/27 全球购物
几道Web/Ajax的面试题
2016/11/05 面试题
外语专业毕业生个人的自荐信
2013/11/19 职场文书
高中历史教学反思
2014/02/08 职场文书
先进班组材料范文
2014/12/25 职场文书
幼儿教师辞职信
2015/02/27 职场文书
Python实现排序方法常见的四种
2021/07/15 Python