当前位置: 移动技术网 > IT编程>脚本编程>vue.js > 详解vuex 中的 state 在组件中如何监听

详解vuex 中的 state 在组件中如何监听

2018年04月26日  | 移动技术网IT编程  | 我要评论

黑色卷发发型图片,和平影都,俗人岛华人社区

前言

不知道大家有没有遇到过这样一种情况? 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渲染为空。


思考

想的是,当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;
  }
}

最终效果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网