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

 更新时间:2017年05月23日 11:29:48   作者:稀土掘金  
本篇文章主要介绍了详解vuex 中的 state 在组件中如何监听,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

前言

不知道大家有没有遇到过这样一种情况? 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;
  }
}

最终效果

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

相关文章

  • vue data对象重新赋值无效(未更改)的解决方式

    vue data对象重新赋值无效(未更改)的解决方式

    这篇文章主要介绍了vue data对象重新赋值无效(未更改)的解决方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • Vue 多选框所选数量动态变换Box的高度

    Vue 多选框所选数量动态变换Box的高度

    在Web开发中,使用Vue.js框架可以通过ref属性、v-model指令和计算属性等特性实现元素高度的动态调整,文章详细介绍了如何利用Vue的功能根据多选框的选择数量动态改变元素的高度,并通过多个示例展示其应用
    2024-09-09
  • 详解Vue中AXIOS的封装

    详解Vue中AXIOS的封装

    这篇文章主要为大家介绍了Vue中AXIOS的封装,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • 使用Vue 实现滑动验证码功能

    使用Vue 实现滑动验证码功能

    本文章主要来介绍一下第一个阶段,也就是前端校验的验证码的实现,下面来介绍一下拖动验证码的具体实现。这篇文章主要介绍了利用 Vue 实现滑动验证码,需要的朋友可以参考下
    2019-06-06
  • 在Vue中定义和调用过滤器的方法

    在Vue中定义和调用过滤器的方法

    过滤器(Filters)是 vue 为开发者提供的功能,常用于文本的格式化,这篇文章主要介绍了如何在Vue中定义和调用过滤器,需要的朋友可以参考下
    2023-09-09
  • Vue利用自定义指令实现按钮权限控制

    Vue利用自定义指令实现按钮权限控制

    这篇文章主要为大家详细介绍了Vue如何利用自定义指令实现按钮权限控制效果,文中的示例代码讲解详细,具有一定的学习价值,需要的可以参考下
    2023-05-05
  • Vue实现父子组件传值其实不难

    Vue实现父子组件传值其实不难

    这篇文章主要介绍了Vue实现父子组件传值其实不难问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • Vue3.x的版本中build后dist文件中出现legacy的js文件问题

    Vue3.x的版本中build后dist文件中出现legacy的js文件问题

    这篇文章主要介绍了Vue3.x的版本中build后dist文件中出现legacy的js文件问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • vue实现横向时间轴

    vue实现横向时间轴

    这篇文章主要为大家详细介绍了vue实现横向时间轴,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • 微信jssdk逻辑在vue中的运用详解

    微信jssdk逻辑在vue中的运用详解

    这篇文章主要介绍了微信jssdk逻辑在vue中的运用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11

最新评论