详解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的闭包的一个示例说明
Nov 18 Javascript
jquery ajax提交表单数据的两种方式
Nov 24 Javascript
最常用的12种设计模式小结
Aug 09 Javascript
深入浅析JavaScript中的scrollTop
Jul 11 Javascript
如何制作幻灯片(代码分享)
Jan 06 Javascript
Vue.js 60分钟快速入门教程
Mar 28 Javascript
Bootstrap响应式导航由768px变成992px的实现代码
Jun 15 Javascript
Bootstrap弹出框(Popover)被挤压的问题小结
Jul 11 Javascript
解决vue中post方式提交数据后台无法接收的问题
Aug 11 Javascript
JS获取动态添加元素的方法详解
Jul 31 Javascript
Vuex实现数据共享的方法
Dec 20 Javascript
JS使用Chrome浏览器实现调试线上代码
Jul 23 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源码分析之DZX1.5随机数函数random用法
2015/06/17 PHP
PHP编写简单的App接口
2016/08/28 PHP
php实现的网页版剪刀石头布游戏示例
2016/11/25 PHP
在javascript中关于节点内容加强
2013/04/11 Javascript
javascript ajax 仿百度分页函数
2013/10/29 Javascript
iframe子父页面调用js函数示例
2013/11/07 Javascript
javascript实现文本域写入字符时限定字数
2014/02/12 Javascript
详解JavaScript语法对{}处理的坑爹之处
2014/06/05 Javascript
JS回调函数简单用法示例
2017/02/09 Javascript
Node.js模块全局安装路径配置方法
2018/05/17 Javascript
vue项目中使用tinymce编辑器的步骤详解
2018/09/11 Javascript
详解vue 数组和对象渲染问题
2018/09/21 Javascript
微信小程序顶部导航栏滑动tab效果
2019/01/28 Javascript
判断文字超过2行添加展开按钮,未超过则不显示,溢出部分显示省略号
2019/04/28 Javascript
layui switch 开关监听 弹出确定状态转换的例子
2019/09/21 Javascript
Vue使用NProgress进度条的方法
2019/09/21 Javascript
Python处理字符串之isspace()方法的使用
2015/05/19 Python
Python实现给文件添加内容及得到文件信息的方法
2015/05/28 Python
python实现周期方波信号频谱图
2018/07/21 Python
python模拟点击网页按钮实现方法
2020/02/25 Python
Django认证系统user对象实现过程解析
2020/03/02 Python
pycharm解决关闭flask后依旧可以访问服务的问题
2020/04/03 Python
详解CSS3+JS完美实现放大镜模式
2020/12/03 HTML / CSS
html5需遵循的6个设计原则
2016/04/27 HTML / CSS
Dillard’s百货官网:Dillards.com
2018/05/26 全球购物
Vita Fede官网:在意大利手工制作,在纽约市设计
2019/10/25 全球购物
会计岗位描述
2014/02/22 职场文书
施工协议书范本
2014/04/22 职场文书
党的群众路线教育实践活动剖析材料
2014/09/30 职场文书
千与千寻观后感
2015/06/04 职场文书
毕业生政审意见范文
2015/06/04 职场文书
数学复习课教学反思
2016/02/18 职场文书
2019幼儿园感恩节活动策划书
2019/11/28 职场文书
postgres之jsonb属性的使用操作
2021/06/23 PostgreSQL
利用Python读取微信朋友圈的多种方法总结
2021/08/23 Python
js前端图片加载异常兜底方案
2022/06/21 Javascript