详解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 仿百度输入标签插件附效果图
Jul 04 Javascript
JS模仿手机端九宫格登录功能实现代码
Apr 28 Javascript
jQuery联动日历的实例解析
Dec 02 Javascript
基于JQuery实现的跑马灯效果(文字无缝向上翻动)
Dec 02 Javascript
jquery编写日期选择器
Mar 16 Javascript
vue.js 使用axios实现下载功能的示例
Mar 05 Javascript
JS实现头条新闻的经典轮播图效果示例
Jan 30 Javascript
详解mpvue中小程序自定义导航组件开发指南
Feb 11 Javascript
在Web关闭页面时发送Ajax请求的实现方法
Mar 07 Javascript
JS获取动态添加元素的方法详解
Jul 31 Javascript
解决vue项目打包上服务器显示404错误,本地没出错的问题
Nov 03 Javascript
Vue实现小购物车功能
Dec 21 Vue.js
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下foreach提示Warning:Invalid argument supplied for foreach()的解决方法
2014/11/11 PHP
Yii的CDbCriteria查询条件用法实例
2014/12/04 PHP
Laravel框架下的Contracts契约详解
2020/03/17 PHP
认识延迟时间为0的setTimeout
2008/05/16 Javascript
javascript 四则运算精度修正函数代码
2010/05/31 Javascript
jquery validate poshytip 自定义样式
2012/11/26 Javascript
原生js实现改变随意改变div属性style的名称和值的结果
2013/09/26 Javascript
基于jquery实现图片放大功能
2016/05/07 Javascript
jQuery实现日期联动效果实例
2016/07/26 Javascript
jQuery视差滚动效果网页实现方法经验总结
2016/09/29 Javascript
微信小程序开发图片拖拽实例详解
2017/05/05 Javascript
jQuery获取table表中的td标签(实例讲解)
2017/07/28 jQuery
详解nodejs通过代理(proxy)发送http请求(request)
2017/09/22 NodeJs
Vue 进入/离开动画效果
2017/12/26 Javascript
element UI upload组件上传附件格式限制方法
2018/09/04 Javascript
使用jquery模拟a标签的click事件无法实现跳转的解决
2018/12/04 jQuery
js实现黑白div块画空心的图形
2018/12/13 Javascript
JavaScript switch语句使用方法简介
2019/12/30 Javascript
js实现选项卡效果
2020/03/07 Javascript
vue.js实现h5机器人聊天(测试版)
2020/07/16 Javascript
Python读取网页内容的方法
2015/07/30 Python
python一键去抖音视频水印工具
2018/09/14 Python
Python使用Pandas读写Excel实例解析
2019/11/19 Python
keras打印loss对权重的导数方式
2020/06/10 Python
CSS3实现千变万化的文字阴影text-shadow效果设计
2016/04/26 HTML / CSS
HTML5响应式(自适应)网页设计的实现
2017/11/17 HTML / CSS
世界第一冲浪品牌:O’Neill
2016/08/30 全球购物
KIKO美国官网:意大利的平价彩妆品牌
2017/05/16 全球购物
意大利买卖二手奢侈品网站:LAMPOO
2020/06/03 全球购物
kfc实习自我鉴定
2013/12/14 职场文书
行政内勤岗位职责
2014/04/07 职场文书
《鹬蚌相争》教学反思
2014/04/22 职场文书
护士长2014年终工作总结
2014/11/11 职场文书
2016年教师节特级教师获奖感言
2015/12/09 职场文书
基于Python的EasyGUI学习实践
2021/05/07 Python
Python实战之实现简易的学生选课系统
2021/05/25 Python