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

发布时间 - 2026-01-11 01:15:10    点击率:

前言

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

最终效果

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


# vuex  # 监听state  # vue  # state  # 监听  # 变化  # vuex提交state&&实时监听state数据的改变方法  # vuex state中的数组变化监听实例  # vue3实现监听store中state状态变化的简单方法  # 为空  # 的是  # 就会  # 还没有  # 什么时候  # 会在  # 很容易  # 用了  # 再去  # 就想  # 前就  # 使用这个  # 遇到过  # 大家多多  # 具体操作  # 过程中  # 举例说明  # 也就是说  # 加载  # js 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 浅谈Javascript中的Label语句  Laravel怎么清理缓存_Laravel optimize clear命令详解  如何在IIS7上新建站点并设置安全权限?  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  如何用美橙互联一键搭建多站合一网站?  PHP正则匹配日期和时间(时间戳转换)的实例代码  Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?  Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践  Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程  Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询  Laravel怎么解决跨域问题_Laravel配置CORS跨域访问  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  清除minerd进程的简单方法  如何快速搭建高效WAP手机网站?  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  零服务器AI建站解决方案:快速部署与云端平台低成本实践  Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】  JS经典正则表达式笔试题汇总  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  大连网站制作公司哪家好一点,大连买房网站哪个好?  打造顶配客厅影院,这份100寸电视推荐名单请查收  微信小程序 闭包写法详细介绍  网站建设要注意的标准 促进网站用户好感度!  BootStrap整体框架之基础布局组件  Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】  Laravel如何生成和使用数据填充?(Seeder和Factory示例)  C++时间戳转换成日期时间的步骤和示例代码  北京专业网站制作设计师招聘,北京白云观官方网站?  Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程  Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】  HTML 中动态设置元素 name 属性的正确语法详解  Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】  Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境  Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】  EditPlus中的正则表达式 实战(2)  如何实现建站之星域名转发设置?  LinuxShell函数封装方法_脚本复用设计思路【教程】  桂林网站制作公司有哪些,桂林马拉松怎么报名?  Laravel如何实现API版本控制_Laravel API版本化路由设计策略  php增删改查怎么学_零基础入门php数据库操作必知基础【教程】  如何用y主机助手快速搭建网站?  Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置  浅谈redis在项目中的应用  Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性  Android中AutoCompleteTextView自动提示  Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法  如何快速登录WAP自助建站平台?  如何在宝塔面板创建新站点?