详解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 相关文章推荐
pjblog修改技巧汇总
Mar 12 Javascript
jQuery 各种浏览器下获得日期区别
Dec 22 Javascript
extjs 04_grid 单击事件新发现
Nov 27 Javascript
jQuery动态设置form表单的enctype值(实现代码)
Jul 04 Javascript
js弹出div并显示遮罩层
Feb 12 Javascript
jquery实现点击弹出层效果的简单实例
Mar 03 Javascript
jQuery移动页面开发中的触摸事件与虚拟鼠标事件简介
Dec 03 Javascript
js实现n秒倒计时后才可以点击的效果
Dec 20 Javascript
内容滑动切换效果jquery.hwSlide.js插件封装
Jul 07 Javascript
Django+vue跨域问题解决的详细步骤
Jan 20 Javascript
vue中组件通信的八种方式(值得收藏!)
Aug 09 Javascript
Vue项目中如何封装axios(统一管理http请求)
May 02 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中获取文件扩展名的N种方法小结
2012/02/27 PHP
测试php函数的方法
2013/11/13 PHP
PHP安全的URL字符串base64编码和解码
2014/06/19 PHP
php实现和c#一致的DES加密解密实例
2017/07/24 PHP
JavaScript 解析Json字符串的性能比较分析代码
2009/12/16 Javascript
jQuery插件原来如此简单 jQuery插件的机制及实战
2012/02/07 Javascript
js自动闭合html标签(自动补全html标记)
2012/10/04 Javascript
解析Javascript中难以理解的11个问题
2013/12/09 Javascript
JavaScript中调用函数的4种方式代码实例
2015/07/08 Javascript
jquery validate demo 基础
2015/10/29 Javascript
js代码实现点击按钮出现60秒倒计时
2021/01/28 Javascript
Javascript中级语法快速入手
2016/07/30 Javascript
Javascript使用uploadify来实现多文件上传
2016/11/16 Javascript
基于JS实现的随机数字抽签实例
2016/12/08 Javascript
详解webpack-dev-server使用http-proxy解决跨域问题
2018/01/13 Javascript
基于vue实现可搜索下拉框定制组件
2020/03/26 Javascript
聊聊Vue 中 title 的动态修改问题
2019/06/11 Javascript
使用kbone解决Vue项目同时支持小程序问题
2019/11/08 Javascript
node后端服务保活的实现
2019/11/10 Javascript
[16:56]heroes英雄教学 司夜刺客
2014/09/18 DOTA
Python Web服务器Tornado使用小结
2014/05/06 Python
python Selenium爬取内容并存储至MySQL数据库的实现代码
2017/03/16 Python
Python学习小技巧之利用字典的默认行为
2017/05/20 Python
Python 处理图片像素点的实例
2019/01/08 Python
华为校园招聘上机笔试题 扑克牌大小(python)
2020/04/22 Python
python程序文件扩展名知识点详解
2020/02/27 Python
Python+Selenium实现自动化的环境搭建的步骤(图文)
2020/09/01 Python
html5通过canvas实现刮刮卡效果示例分享
2014/01/27 HTML / CSS
html5使用canvas绘制文字特效
2014/12/15 HTML / CSS
html5启动原生APP总结
2020/07/03 HTML / CSS
本科生详细的自我评价
2013/09/19 职场文书
工商管理本科生求职信
2014/07/13 职场文书
销售顾问工作计划书
2014/09/15 职场文书
党的群众路线批评与自我批评范文
2014/10/16 职场文书
学校食品安全责任书
2015/01/29 职场文书
南京导游词
2015/02/03 职场文书